Week05_정보보안 일반
Week 05 · 4과목 정보보안 일반
Day 1 · 접근통제 (★ 매회 출제)
1-1. 접근통제란 무엇인가
접근통제(Access Control) 는 "누가(주체) 무엇에(객체) 어떤 행동(접근 권한)을 할 수 있는가"를 정하고 강제하는 일입니다.
- 주체(Subject): 행위를 하는 능동적 존재. 사용자, 프로세스, 프로그램.
- 객체(Object): 행위를 당하는 수동적 존재. 파일, DB 테이블, 프린터, 메모리.
- 접근(Access): 읽기(r), 쓰기(w), 실행(x), 삭제, 추가(append) 등.
비유하면 회사 건물입니다. 사원증을 찍는 사람 = 주체, 문이 열리는 회의실 = 객체, "이 사원증은 3층 회의실만 열린다" = 접근 권한입니다. 같은 프로세스라도 어떤 때는 주체(파일을 읽을 때), 어떤 때는 객체(다른 프로세스가 종료시킬 때)가 될 수 있다는 점이 시험에 가끔 나옵니다.
1-2. 접근통제 절차 (식별 → 인증 → 인가 → 책임추적)
flowchart LR
A["식별
Identification
나는 누구다"] --> B["인증
Authentication
그걸 증명"]
B --> C["인가
Authorization
권한 부여"]
C --> D["책임추적성
Accountability
로그·감사"]| 단계 | 질문 | 예시 | 비고 |
|---|---|---|---|
| 식별 | 너는 누구라고 주장하나? | 아이디 입력, 사원증 번호 | 유일해야 하고 공유 금지 |
| 인증 | 정말 그 사람인가? | 패스워드, OTP, 지문 | 주장을 검증 |
| 인가 | 무엇을 해도 되나? | 읽기만 허용 | 인증 후에 이뤄짐 |
| 책임추적성 | 누가 언제 무엇을 했나? | 감사 로그 | 식별이 유일해야 가능 |
- AAA = Authentication(인증) · Authorization(인가) · Accounting(과금/기록). RADIUS·TACACS+가 이 AAA를 제공합니다(Day 2).
- 순서를 꼭 기억하세요: 식별 → 인증 → 인가. "인가 후 인증" 같은 보기는 오답입니다.
1-3. 접근통제의 3요소 (정책 · 메커니즘 · 모델)
| 요소 | 의미 | 예 |
|---|---|---|
| 접근통제 정책 | "무엇을 허용할지" 정하는 규칙/방침 | DAC, MAC, RBAC |
| 접근통제 메커니즘 | 정책을 실제 구현하는 기술 수단 | ACL, Capability List, 보안 레이블, 접근통제 행렬 |
| 접근통제 (보안) 모델 | 정책을 수학적·형식적으로 표현하고 안전성을 증명 | BLP, Biba, 클락-윌슨, 만리장성 |
- 기억법: 정책(What) → 모델(형식화) → 메커니즘(How).
- 접근통제 원칙: 최소 권한(Least Privilege), 직무 분리(Separation of Duties), 알 필요(Need-to-know), 기본 거부(Default Deny).
1-4. 접근통제 정책: DAC · MAC · RBAC (+ABAC)
① DAC (Discretionary, 임의적 접근통제)
- 객체의 소유자가 자기 마음대로(임의로) 다른 사용자에게 권한을 줍니다. 리눅스
chmod 640 file이 대표 예. - 판단 기준은 주체의 신분(ID) 또는 그가 속한 그룹. 그래서 "신분 기반(Identity-based)" 접근통제라고도 합니다.
- 약점: 권한을 받은 사람이 정보를 복사해 다른 곳에 써버리면 막을 수 없습니다(정보 흐름 통제 불가). 사용자가 실행한 트로이목마는 사용자의 권한을 그대로 갖고 파일을 빼돌릴 수 있습니다.
② MAC (Mandatory, 강제적 접근통제)
- 시스템(보안관리자)이 주체에게 비밀취급인가(clearance), 객체에 보안 등급(classification) 을 붙이고, 둘을 비교하는 규칙으로 접근을 결정합니다. 소유자라도 바꿀 수 없습니다.
- "규칙 기반(Rule-based)", "레이블 기반(Label-based)"이라고도 합니다. 군사·정부 기밀 시스템, SELinux.
- 장점: 정보 흐름을 강하게 통제. 단점: 경직되고 관리가 어려움.
③ RBAC (Role-Based, 역할 기반 접근통제)
- 권한을 사람이 아니라 역할(직무) 에 붙이고, 사람은 역할에 배정됩니다. "사용자 → 역할 → 권한".
- 인사이동이 있으면 역할 배정만 바꾸면 끝. 그래서 "인사이동이 잦은 조직"에 적합.
- 중앙 관리자가 역할을 정의하므로 비임의적(Non-discretionary) 접근통제로 분류됩니다.
- NIST RBAC 구성: Core RBAC(기본) → Hierarchical RBAC(역할 상속) → Constrained RBAC(직무 분리: SSD 정적, DSD 동적).
- SSD(정적 직무분리): 애초에 "구매요청자"와 "구매승인자" 역할을 한 사람에게 동시 배정 금지.
- DSD(동적 직무분리): 두 역할을 가질 수는 있지만 한 세션에서 동시에 활성화 금지.
flowchart LR
U1[김대리] --> R1[회계 담당]
U2[이과장] --> R2[회계 승인자]
U3[박사원] --> R1
R1 --> P1[전표 작성]
R1 --> P2[전표 조회]
R2 --> P2
R2 --> P3[전표 승인]④ ABAC (Attribute-Based, 속성 기반)
- 주체 속성(부서, 직급) + 객체 속성(분류) + 환경 속성(시간, 위치, 기기) 을 조합한 정책. "근무시간에 사내망에서 접속한 인사팀 과장만 급여 파일 읽기". 표준 정책 언어 XACML. 제로트러스트에서 많이 씀.
| 구분 | DAC | MAC | RBAC |
|---|---|---|---|
| 권한 결정자 | 객체 소유자 | 시스템(관리자) | 중앙 관리자 |
| 결정 기준 | 신분(ID)·그룹 | 보안 레이블(등급) | 역할(직무) |
| 유연성 | 높음 | 낮음 | 중간 |
| 정보흐름 통제 | 불가 | 가능 | 제한적 |
| 대표 구현 | ACL, Unix rwx | 보안 레이블, SELinux | 역할-권한 매핑 |
| 적합 환경 | 일반 상용 | 군사·정부 | 인사이동 잦은 기업 |
| 약점 | 트로이목마, 권한 남용 | 경직, 관리 부담 | 역할 폭증(Role explosion) |
1-5. 접근통제 행렬 → ACL / Capability List
접근통제 행렬(Access Control Matrix) 은 행=주체, 열=객체, 칸=권한인 표입니다. 개념적으로는 완벽하지만 대부분 칸이 비어 있어(희소 행렬) 그대로 저장하면 낭비가 큽니다. 그래서 둘 중 한 방향으로 잘라서 저장합니다.
- 열(객체) 단위로 자르면 → ACL(Access Control List): "이 파일에 누가 무엇을 할 수 있나". 객체에 붙어 있음.
- 행(주체) 단위로 자르면 → Capability List(권한 리스트): "이 사용자는 어떤 객체에 무엇을 할 수 있나". 주체가 들고 다니는 티켓/열쇠꾸러미.
✏️ 연습: 행렬을 ACL과 CL로 바꾸기
| 주체 \ 객체 | 급여.xlsx | 공지.txt | 백업.sh |
|---|---|---|---|
| Alice | r, w | r | x |
| Bob | – | r, w | – |
| Carol | r | r | r, x |
풀이 1 — ACL (열 단위, 객체 기준)
급여.xlsx : Alice(r,w) → Carol(r)
공지.txt : Alice(r) → Bob(r,w) → Carol(r)
백업.sh : Alice(x) → Carol(r,x)
풀이 2 — Capability List (행 단위, 주체 기준)
Alice : 급여.xlsx(r,w), 공지.txt(r), 백업.sh(x)
Bob : 공지.txt(r,w)
Carol : 급여.xlsx(r), 공지.txt(r), 백업.sh(r,x)
| 질문 | 유리한 방식 | 이유 |
|---|---|---|
| "급여.xlsx에 접근 가능한 사람 전부는?" | ACL | 객체 하나만 보면 됨 |
| "Bob이 가진 권한 전부는?" | Capability | 주체 하나만 보면 됨 |
| "Carol 퇴사, 모든 권한 회수" | Capability | 주체의 리스트만 삭제 (ACL이면 모든 객체를 뒤져야 함) |
| "파일 삭제 시 권한 정리" | ACL | 객체와 함께 ACL도 사라짐 |
| 분산 환경에서 위임 | Capability | 티켓을 넘기면 됨(Kerberos 티켓과 유사) |
1-6. 보안 레이블과 지배(Dominance) 관계
MAC과 BLP/Biba를 풀려면 "어느 레이블이 더 높은가" 를 판단할 줄 알아야 합니다.
- 보안 레이블 = (등급, 범주 집합). 예: (비밀, {국방, 외교})
- 등급(계층적): 1급비밀(TS) > 2급비밀(S) > 3급비밀(C) > 대외비/평문(U)
- 범주(비계층적, Need-to-know): {핵, 외교, 국방} 같은 부서/주제 꼬리표
- L1이 L2를 지배(L1 ≥ L2) 하려면 두 조건 모두: ① 등급1 ≥ 등급2, ② 범주1 ⊇ 범주2
- 둘 다 아니면 "비교 불가(incomparable)" → 읽기도 쓰기도 불가
| L1 | L2 | 관계 |
|---|---|---|
| (S, {핵, 외교}) | (C, {핵}) | L1 ≥ L2 (등급 높고, 범주 포함) |
| (S, {핵}) | (C, {외교}) | 비교 불가 (범주가 포함 관계 아님) |
| (C, {핵, 외교}) | (S, {핵}) | 비교 불가 (등급은 낮은데 범주는 넓음) |
| (TS, { }) | (U, {핵}) | 비교 불가 (TS여도 '핵' 범주 없음) |
이렇게 레이블들이 "지배" 관계로 이루는 구조가 수학의 격자(Lattice) 이고, 이것을 이용한 모델이 래티스(격자) 모델(Denning)입니다. 두 레이블의 최소 상한(LUB) = 둘을 모두 지배하는 가장 낮은 레이블, 최대 하한(GLB) = 둘 모두에게 지배되는 가장 높은 레이블.
1-7. 벨-라파둘라(BLP) 모델 — 기밀성
1973년 미 국방부용으로 만들어진 최초의 수학적 보안 모델. 목표는 오직 기밀성: "비밀이 낮은 곳으로 새지 않게".
| 규칙 | 내용 | 별명 |
|---|---|---|
| 단순 보안 속성 (Simple Security, ss-property) | 주체는 자기보다 높은 객체를 읽을 수 없다 | No Read Up |
| 스타(*) 보안 속성 (*-property) | 주체는 자기보다 낮은 객체에 쓸 수 없다 | No Write Down |
| 강한 스타 속성 (Strong *) | 읽기·쓰기는 같은 등급에서만 | – |
| 임의적 보안 속성 (ds-property) | 위 규칙 외에 접근통제 행렬(DAC)도 만족 | – |
왜 "No Write Down"이 필요할까? 비밀 등급 장교가 비밀 문서를 읽고, 그 내용을 평문 게시판에 써버리면 비밀이 샙니다. 트로이목마가 몰래 그런 짓을 하는 것도 이 규칙이 막습니다. 반대로 "위로 쓰기(Write Up)"는 허용 — 이등병이 장군에게 보고서를 올리는 건 기밀성에 문제가 없습니다(다만 무결성은 깨질 수 있음 → 그래서 Biba가 나옴).
BLP (기밀성) 주체 = 2급비밀(S)
┌──────────────┐
│ 1급비밀 (TS) │ ← 읽기 ✗ (No Read Up) 쓰기 ○ (Write Up 허용)
├──────────────┤
│ 2급비밀 (S) │ ← 읽기 ○ 쓰기 ○
├──────────────┤
│ 3급비밀 (C) │ ← 읽기 ○ (Read Down) 쓰기 ✗ (No Write Down)
├──────────────┤
│ 평문 (U) │ ← 읽기 ○ 쓰기 ✗
└──────────────┘
- 평온성 원칙(Tranquility): 동작 중에 레이블을 함부로 바꾸지 않는다(강한 평온성: 절대 불변 / 약한 평온성: 보안 정책을 위반하지 않는 범위에서만 변경).
- BLP는 상태 기계(State Machine) 모델에 기반: 안전한 상태에서 시작해 모든 상태 전이가 안전하면 시스템은 항상 안전.
- 한계: 무결성은 고려 안 함, 은닉 채널(Covert channel)은 못 막음.
1-8. 비바(Biba) 모델 — 무결성
1977년. BLP를 뒤집은 무결성 모델. 걱정거리가 "새는 것"이 아니라 "오염되는 것"입니다.
| 규칙 | 내용 | 별명 |
|---|---|---|
| 단순 무결성 속성 | 자기보다 낮은 무결성 객체를 읽지 않는다 (오염된 정보 흡수 금지) | No Read Down |
| 스타(*) 무결성 속성 | 자기보다 높은 무결성 객체에 쓰지 않는다 (윗 데이터 오염 금지) | No Write Up |
| 호출 속성 (Invocation) | 자기보다 높은 무결성의 주체를 호출(요청)하지 않는다 | – |
Biba (무결성) 주체 = 중(Medium)
┌──────────────┐
│ 높음 (High) │ ← 읽기 ○ (Read Up) 쓰기 ✗ (No Write Up)
├──────────────┤
│ 중간 (Med) │ ← 읽기 ○ 쓰기 ○
├──────────────┤
│ 낮음 (Low) │ ← 읽기 ✗ (No Read Down) 쓰기 ○ (Write Down)
└──────────────┘
비유: 신문사 편집장(높은 무결성)은 출처 불명 찌라시(낮음)를 읽고 기사에 반영하지 않으며, 인턴(낮음)은 최종 기사(높음)를 직접 수정하지 못합니다.
- Biba는 무결성 3목표 중 "비인가자의 변경 방지" 하나만 다룹니다.
- 클락-윌슨은 3목표 모두(비인가자 변경 방지 + 인가자의 부적절한 변경 방지 + 내·외부 일관성 유지).
✏️ 드릴: "읽을 수 있나? 쓸 수 있나?"
BLP (등급: TS > S > C > U)
| 주체 | 객체 | 읽기 | 쓰기 | 근거 |
|---|---|---|---|---|
| S | TS | ✗ | ○ | No Read Up / Write Up 허용 |
| S | S | ○ | ○ | 같은 등급 |
| S | C | ○ | ✗ | Read Down 허용 / No Write Down |
| U | S | ✗ | ○ | No Read Up |
| TS | U | ○ | ✗ | No Write Down |
| (S,{핵,외교}) | (C,{핵}) | ○ | ✗ | 주체가 객체 지배 |
| (S,{핵}) | (C,{외교}) | ✗ | ✗ | 비교 불가 |
| (S,{핵}) | (TS,{핵,외교}) | ✗ | ○ | 객체가 주체 지배 → 위로 쓰기 |
Biba (무결성: High > Medium > Low)
| 주체 | 객체 | 읽기 | 쓰기 | 근거 |
|---|---|---|---|---|
| Medium | High | ○ | ✗ | Read Up 허용 / No Write Up |
| Medium | Low | ✗ | ○ | No Read Down / Write Down 허용 |
| Low | High | ○ | ✗ | 위로 쓰기 금지 |
| High | Low | ✗ | ○ | 아래 읽기 금지 |
요령: BLP는 "읽기는 아래로, 쓰기는 위로", Biba는 "읽기는 위로, 쓰기는 아래로". 화살표 방향이 정확히 반대입니다.
1-9. 클락-윌슨(Clark-Wilson) 모델 — 상업용 무결성
1987년. 은행·회계처럼 "정해진 절차로만 데이터를 바꿔야 하는" 상업 환경용 무결성 모델.
| 용어 | 의미 | 은행 예시 |
|---|---|---|
| CDI (Constrained Data Item) | 무결성을 보호해야 할 데이터 | 계좌 잔액 |
| UDI (Unconstrained Data Item) | 검증 안 된 외부 입력 | 고객이 쓴 입금 신청서 |
| TP (Transformation Procedure) | CDI를 바꾸는 정형화된(잘 짜인) 프로그램 | 이체 처리 프로그램 |
| IVP (Integrity Verification Procedure) | CDI가 올바른 상태인지 검사 | 일일 마감 대사 |
- 핵심 1 — 정형화된 트랜잭션(Well-formed Transaction): 사용자는 CDI를 직접 못 건드리고 반드시 TP를 통해서만 바꿉니다. 이를 접근 3원소(Access Triple) = (사용자, TP, CDI) 로 통제합니다.
- 핵심 2 — 직무 분리(Separation of Duties): 한 사람이 거래 생성과 승인을 모두 못 하게.
- 규칙은 인증 규칙(C1~C5) 과 집행 규칙(E1~E4) 으로 구성. 감사 로그(책임추적성)도 요구.
flowchart LR
U[사용자] -->|직접 접근 ✗| CDI[(CDI 계좌잔액)]
U --> TP[TP 이체 프로그램]
TP -->|정해진 방식으로만 변경| CDI
UDI[UDI 입금신청서] --> TP
IVP[IVP 마감검증] -.검사.-> CDI1-10. 만리장성(Chinese Wall, 브루어-내쉬) 모델 — 이해충돌 방지
1989년. 컨설팅·투자은행처럼 경쟁사 정보를 동시에 다루면 안 되는 곳의 모델. 특징은 접근 이력에 따라 권한이 동적으로 바뀐다는 것.
- 회사 데이터셋(CD): 한 회사의 정보 묶음
- 이해충돌 클래스(COI): 서로 경쟁하는 회사들의 그룹
COI-1 (은행): [A은행] [B은행]
COI-2 (정유): [C정유] [D정유]
컨설턴트 김씨의 행동:
- 처음엔 아무것이나 볼 수 있음 → A은행 자료 열람 ○
- 이제 같은 COI의 B은행은 ✗ (벽이 생김)
- 다른 COI인 C정유는 ○ → 이후 D정유는 ✗
- A은행 자료는 계속 ○
- 쓰기 규칙: 어떤 객체에 쓰려면, 읽을 수 있는 객체가 같은 회사 데이터셋 안에만 있어야 함(경쟁사 정보가 섞여 흘러가지 않게).
- 기밀성과 무결성 둘 다 고려하지만, 시험 키워드는 "이해충돌(Conflict of Interest)".
1-11. 기타 모델
| 모델 | 핵심 | 시험 키워드 |
|---|---|---|
| HRU (해리슨-루조-울만) | 접근통제 행렬 + 권한을 바꾸는 명령(생성·삭제·권한 부여/삭제). 일반적인 경우 "안전성 문제"는 결정 불가능(튜링 기계로 환원) | 권한 변경, 안전성 판정 불가 |
| Take-Grant | 시스템을 방향 그래프로 표현. 권한 이동 규칙 take·grant·create·remove. 안전성을 선형 시간에 판정 가능 | 그래프, take/grant |
| 래티스(격자) 모델 | 보안 레이블이 이루는 격자에서 정보는 아래→위(지배 방향)로만 흐름. LUB/GLB | Denning, 정보 흐름 |
| 정보 흐름 모델 | 객체 간 정보가 허용된 방향으로만 흐르게 | BLP·Biba의 기반 |
| 비간섭(Non-interference) 모델 | 높은 등급 사용자의 행동이 낮은 등급 사용자가 보는 결과에 아무 영향(간섭)도 주지 않아야 함 → 은닉 채널·추론 공격 대응 | Goguen-Meseguer |
| 상태 기계 모델 | 안전한 상태 → 안전한 전이 → 항상 안전 | BLP의 기반 |
1-12. 접근통제 유형(통제 기능별) 보충
| 기능 | 의미 | 예 |
|---|---|---|
| 예방(Preventive) | 사고 발생 전에 막음 | 방화벽, 접근통제 |
| 탐지(Detective) | 발생한 사고를 발견 | IDS, 감사 로그 |
| 교정(Corrective) | 피해를 바로잡음 | 백신 치료, 패치 |
| 복구(Recovery) | 정상 상태로 회복 | 백업 복원, DRP |
| 억제(Deterrent) | 시도 자체를 단념시킴 | 경고 문구, CCTV 표지 |
| 보완(Compensating) | 주 통제가 불가할 때 대체 | 직무 분리 대신 강화된 감사 |
⚠️ 시험 함정 (Day 1)
- BLP의 *"No Write Down" = -속성, "No Read Up" = 단순 보안 속성. 속성 이름과 규칙을 바꿔치기한 보기가 자주 나옵니다.
- Biba는 No Read Down / No Write Up. "BLP와 같은 방향" 보기는 오답.
- RBAC를 DAC로 분류하면 틀림. RBAC는 비임의적(Non-discretionary).
- 행 = Capability, 열 = ACL. 거꾸로 낸 보기 주의.
- DAC가 트로이목마에 취약한 것이지 MAC이 취약한 것이 아님.
- 클락-윌슨의 TP를 "정형화된 트랜잭션 처리", 만리장성의 키워드는 "이해충돌". 만리장성을 "무결성 전용"이라 하면 틀림.
- "HRU는 안전성 문제를 항상 판정할 수 있다" → ✗ (일반적으로 결정 불가능). Take-Grant는 판정 가능.
- 레이블이 비교 불가일 때는 BLP에서도 읽기·쓰기 둘 다 불가.
📌 기출 포인트 (Day 1)
- 모델의 목적(기밀성/무결성/이해충돌) 과 규칙 이름을 짝짓게 하는 문제가 가장 많습니다.
- 상황 묘사("소유자가 권한을 준다", "레이블을 비교한다", "직무가 바뀌면 역할만 교체")를 주고 DAC/MAC/RBAC 중 고르기.
- 접근통제 행렬에서 ACL과 Capability를 구분하거나 각각의 장단점(권한 회수 용이성 등)을 묻기.
- 클락-윌슨 구성요소(CDI, UDI, TP, IVP)의 의미, 만리장성의 동적 권한 변화 설명 고르기.
- 식별·인증·인가·책임추적성의 순서/정의 고르기.
📝 확인 문제 (Day 1)
Q1. 주체 등급이 '2급비밀', 객체 등급이 '3급비밀'일 때 BLP 모델에서 허용되는 것은?
① 읽기와 쓰기 모두 허용 ② 읽기만 허용 ③ 쓰기만 허용 ④ 둘 다 불허
정답: ②
- ① 틀림: 낮은 객체에 쓰는 것은 *-속성(No Write Down) 위반.
- ② 맞음: 주체가 객체보다 높으므로 아래 읽기(Read Down)는 단순 보안 속성상 허용, 쓰기는 금지.
- ③ 틀림: 쓰기만 허용되는 경우는 객체가 주체보다 높을 때(Write Up).
- ④ 틀림: 둘 다 불허는 레이블이 비교 불가일 때.
Q2. 다음 중 비바(Biba) 모델에 대한 설명으로 옳은 것은?
① 기밀성 보장을 위해 No Read Up 규칙을 둔다
② 낮은 무결성 객체의 정보를 읽어 오염되는 것을 막는다
③ 상업 환경의 직무 분리를 핵심으로 한다
④ 사용자의 접근 이력에 따라 권한이 동적으로 변한다
정답: ②
- ① 틀림: 기밀성·No Read Up은 BLP.
- ② 맞음: 단순 무결성 속성(No Read Down)의 목적.
- ③ 틀림: 직무 분리·정형화된 트랜잭션은 클락-윌슨.
- ④ 틀림: 이력 기반 동적 권한은 만리장성(브루어-내쉬).
Q3. 접근통제 행렬에 대한 설명으로 틀린 것은?
① 열 단위로 저장하면 ACL이 된다
② 행 단위로 저장하면 Capability List가 된다
③ 특정 사용자의 모든 권한을 회수할 때는 ACL 방식이 유리하다
④ 행렬을 그대로 저장하면 빈 칸이 많아 비효율적이다
정답: ③
- ① 맞음: 열 = 객체 기준 = ACL.
- ② 맞음: 행 = 주체 기준 = Capability.
- ③ 틀림(정답): 사용자 권한 일괄 회수는 그 사용자의 Capability List만 지우면 되므로 Capability가 유리. ACL은 모든 객체를 다 뒤져야 함.
- ④ 맞음: 희소 행렬 문제.
Q4. 인사이동이 잦은 대기업에서 직무 변경 시 권한 관리 부담을 줄이고, 직무 분리 원칙을 적용하기 쉬운 접근통제 정책은?
① DAC ② MAC ③ RBAC ④ 신분 기반 접근통제
정답: ③
- ① 틀림: DAC는 소유자가 개별 부여 → 인사이동 시 일일이 수정.
- ② 틀림: MAC는 등급 기반으로 경직.
- ③ 맞음: 역할만 재배정하면 되고 SSD/DSD로 직무 분리 구현.
- ④ 틀림: 신분 기반은 DAC의 다른 이름.
Q5. 클락-윌슨 모델의 구성요소와 설명의 연결로 틀린 것은?
① CDI – 무결성이 보장되어야 하는 데이터
② TP – CDI를 변경하는 정형화된 절차
③ IVP – 외부에서 들어온 검증되지 않은 데이터
④ 접근 3원소 – (사용자, TP, CDI)
정답: ③
- ③ 틀림(정답): 검증되지 않은 외부 데이터는 UDI. IVP는 CDI의 무결성을 검증하는 절차.
- ①②④는 모두 올바른 정의.
Q6. 다음 중 보안 모델과 특징의 연결이 옳지 않은 것은?
① HRU – 접근 권한 변경 명령을 포함, 일반적으로 안전성 판정이 결정 불가능
② Take-Grant – 방향 그래프로 권한 이동을 표현
③ 비간섭 모델 – 높은 등급의 행위가 낮은 등급에 영향을 주지 않도록 하여 은닉 채널에 대응
④ 래티스 모델 – 역할 계층과 세션을 통해 권한을 관리
정답: ④
- ④ 틀림(정답): 역할 계층·세션은 RBAC. 래티스 모델은 보안 레이블의 격자(지배 관계, LUB/GLB)로 정보 흐름을 통제.
- ①②③은 올바른 설명.
Day 2 · 인증 심화 · Kerberos · 키 분배
2-1. 사용자 인증의 4(+1)가지 유형
| 유형 | 영어 | 예 | 약점 |
|---|---|---|---|
| 지식 기반 | Something you know | 패스워드, PIN, 보안 질문 | 추측·유출·재사용 |
| 소유 기반 | Something you have | OTP 토큰, 스마트카드, 보안카드, 휴대폰 | 분실·도난·복제 |
| 존재(생체) 기반 | Something you are | 지문, 홍채, 얼굴, 정맥 | 변경 불가, 오인식 |
| 행위 기반 | Something you do | 서명 패턴, 키보드 타이핑 리듬, 걸음걸이 | 상태에 따라 변동 |
| (위치 기반) | Somewhere you are | GPS, IP 대역 | 위조 가능 |
- 다중 요소 인증(MFA) 은 서로 다른 유형을 결합해야 합니다. "패스워드 + 보안 질문"은 둘 다 지식 기반이라 2단계(2-step)일 뿐 2요소가 아님.
2-2. OTP (One-Time Password)
한 번 쓰고 버리는 패스워드라 재전송(Replay) 공격에 강합니다.
| 방식 | 동기화 기준 | 표준 | 특징 |
|---|---|---|---|
| 시간 동기화 (TOTP) | 현재 시각(보통 30초 간격) | RFC 6238 | 서버·토큰 시계 동기화 필요 |
| 이벤트(카운터) 동기화 (HOTP) | 버튼 누른 횟수 | RFC 4226 | 카운터 어긋나면 재동기화 |
| 질의-응답 (Challenge-Response) | 서버가 준 난수 | – | 사용자가 난수를 입력해야 해 번거로움 |
| S/Key | 해시 체인 | RFC 1760 | 해시값을 역순으로 사용 |
HOTP/TOTP 원리: OTP = Truncate( HMAC(비밀키 K, 카운터 또는 ⌊현재시각/30⌋) ) 를 6자리로 자른 값. 서버도 같은 K로 같은 계산을 해서 비교합니다.
S/Key 해시 체인 원리 (램포트 방식)
비밀 시드 x
H(x) → H²(x) → H³(x) → … → H¹⁰⁰(x) ← 서버는 이 마지막 값만 저장
1회차 로그인: H⁹⁹(x) 제출 → 서버가 H(H⁹⁹) = H¹⁰⁰ 확인 → 저장값을 H⁹⁹로 교체
2회차 로그인: H⁹⁸(x) 제출 → H(H⁹⁸) = H⁹⁹ 확인 …
엿들은 H⁹⁹로는 다음 값 H⁹⁸을 만들 수 없습니다(해시의 일방향성). 체인을 다 쓰면 새로 초기화.
2-3. 바이오 인증(생체 인증)
- 생리적 특징: 지문, 얼굴, 홍채, 망막, 정맥, 손 모양 / 행동적 특징: 서명, 음성, 걸음걸이, 키 입력 패턴(음성은 양쪽으로 분류하기도)
- 요구 조건: 보편성(누구나 가짐), 유일성(사람마다 다름), 영속성(시간이 지나도 불변), 획득성(수집성)(측정 쉬움), 정확성, 수용성(거부감 적음), 기만 용이성(위조 어려움)
| 지표 | 의미 | 오류 유형 | 높으면 |
|---|---|---|---|
| FRR (False Rejection Rate, 오거부율) | 본인을 거부한 비율 | 1종 오류 | 사용자 불편 |
| FAR (False Acceptance Rate, 오인식률) | 타인을 수락한 비율 | 2종 오류 | 보안 사고 |
| CER / EER (교차 오류율) | FAR = FRR이 되는 지점 | – | 낮을수록 정확한 시스템 |
오류율
│╲ ╱ FRR (임계값 높일수록 ↑)
│ ╲ ╱
│ ╲ ╱
│ ╲ CER ╱
│ ╲ ● ╱
│ ╲╱ ╲ ╱
│ ╱ ╲ FAR (임계값 높일수록 ↓)
└──────────────────────────── 판정 임계값(엄격도) →
- 임계값을 엄격하게 하면 FAR↓ FRR↑. 보안이 중요한 곳(금고)은 FAR을 낮추는 것이 우선.
- 생체 정보는 바꿀 수 없으므로 유출 시 치명적 → 원본 대신 템플릿(특징점) 저장, 위조 탐지(Liveness Detection) 필요.
2-4. 메시지 인증과 디바이스 인증
메시지 인증: "이 메시지가 변조되지 않았고(무결성), 주장하는 송신자가 보냈다(출처 인증)"를 확인.
| 방법 | 원리 | 부인방지 |
|---|---|---|
| 메시지 암호화 | 대칭키로 암호화 → 키를 아는 상대만 생성 가능 | ✗ |
| MAC / HMAC | 공유 비밀키 + 메시지로 태그 생성 (Day 5) | ✗ (양쪽이 키를 공유) |
| 해시 + 전자서명 | 개인키로 서명 | ○ |
디바이스 인증: IoT·스마트기기처럼 "사람이 아니라 기기"가 정당한지 확인.
| 방식 | 설명 | 강도 |
|---|---|---|
| 아이디/패스워드 기반 | 기기에 계정 정보 저장 | 낮음 (기본 패스워드 문제 — 미라이 봇넷) |
| MAC 주소 기반 | 네트워크 카드 주소로 식별 | 낮음 (스푸핑 쉬움) |
| 암호 프로토콜 기반 | 챌린지-응답, 대칭키/공개키로 증명 | 중~높음 |
| 인증서 기반 | 기기마다 X.509 인증서·개인키 탑재 (TPM/보안칩 보관) | 높음 |
- FIDO(Fast IDentity Online): 생체 등으로 기기 안에서 사용자를 확인하고, 서버에는 공개키 서명만 보냄 → 서버에 패스워드·생체정보 저장 안 함. UAF(패스워드리스), U2F(2차 인증), FIDO2 = WebAuthn + CTAP, 패스키(Passkey).
2-5. Kerberos v5 상세 (★)
Kerberos는 MIT의 아테나 프로젝트에서 만든 대칭키 기반 인증 + SSO 프로토콜입니다(포트 88). 이름은 그리스 신화의 머리 셋 달린 개(클라이언트·서버·KDC 3자 구조). Windows Active Directory의 기본 인증.
등장 인물
| 용어 | 의미 |
|---|---|
| KDC | 키 분배 센터 = AS + TGS (+ 모든 사용자·서버의 비밀키 DB) |
| AS (Authentication Server) | 처음 로그인 시 신원 확인, TGT 발급 |
| TGS (Ticket Granting Server) | TGT를 보고 서비스 티켓 발급 |
| TGT | "티켓을 발급받기 위한 티켓". TGS의 비밀키로 암호화돼 있어 사용자는 열어볼 수 없음 |
| 서비스 티켓 | 특정 서버용 입장권. 그 서버의 비밀키로 암호화 |
| 세션키 | KDC가 만들어 나눠주는 일회용 대칭키 (K_c,tgs / K_c,v) |
| Authenticator(인증자) | {사용자 ID, 타임스탬프}를 세션키로 암호화한 것 → 티켓을 훔쳐도 재사용 못 하게 |
| Realm(영역) | 하나의 KDC가 관리하는 관리 도메인 (예: CORP.EXAMPLE.COM) |
| Principal | Kerberos가 인증하는 개체 이름 (user@REALM) |
비유 — 놀이공원: 매표소(AS)에서 신분 확인 후 자유이용권 팔찌(TGT) 를 받고, 놀이기구마다 안내소(TGS)에 팔찌를 보여주면 개별 탑승권(서비스 티켓) 을 줍니다. 탑승권을 낼 때는 오늘 날짜가 찍힌 확인증(Authenticator) 도 같이 내야 남이 주운 표로 못 탑니다.
sequenceDiagram
participant C as 클라이언트
participant AS as AS (KDC)
participant TGS as TGS (KDC)
participant V as 서비스 서버 V
Note over C,AS: ① 최초 1회 (로그인)
C->>AS: 1. AS-REQ: ID_c, ID_tgs, 타임스탬프(사전인증)
AS->>C: 2. AS-REP: {K_c,tgs}K_c + TGT={ID_c, K_c,tgs, 유효기간}K_tgs
Note over C,TGS: ② 서비스마다 (TGT 재사용 = SSO)
C->>TGS: 3. TGS-REQ: TGT + Authenticator{ID_c, TS}K_c,tgs + ID_v
TGS->>C: 4. TGS-REP: {K_c,v}K_c,tgs + 티켓_v={ID_c, K_c,v}K_v
Note over C,V: ③ 서비스 접속
C->>V: 5. AP-REQ: 티켓_v + Authenticator{ID_c, TS}K_c,v
V->>C: 6. AP-REP(선택, 상호인증): {TS 확인값}K_c,v단계별 해설
- 사용자가 패스워드를 입력하면 클라이언트는 패스워드로부터 사용자 키 K_c를 만듭니다. 패스워드 자체는 네트워크로 가지 않습니다.
- AS는 세션키 K_c,tgs를 만들어 K_c로 암호화해 줍니다 → 진짜 사용자만 풀 수 있음. 함께 주는 TGT는 K_tgs로 암호화 → 사용자는 열 수 없고 그대로 TGS에 제출만 함.
- 클라이언트는 TGT와, 방금 얻은 K_c,tgs로 만든 Authenticator를 TGS에 보냅니다. TGS는 TGT를 열어 K_c,tgs를 꺼내고, 그 키로 Authenticator를 열어 ID 일치 + 타임스탬프가 허용 오차(기본 5분) 이내인지 확인.
- TGS는 서비스용 세션키 K_c,v를 만들고, 서버 V만 열 수 있는 서비스 티켓을 줍니다.
5~6. 서버 V는 자기 키 K_v로 티켓을 열어 K_c,v를 얻고 Authenticator를 검증. 상호 인증이 필요하면 V가 응답을 돌려줍니다.
| 특징 | 내용 |
|---|---|
| 암호 방식 | 대칭키 (v5는 AES 등 다양한 알고리즘 지원, v4는 DES만) |
| 재전송 방지 | 타임스탬프 + Authenticator |
| SSO | TGT 유효기간 동안 비밀번호 재입력 없이 여러 서비스 이용 |
| 상호 인증 | 지원 (AP-REP) |
| v5 개선점 | 암호 알고리즘 선택, 티켓 유효기간 유연, 티켓 전달(forwardable)·위임, 영역 간(cross-realm) 인증, 사전 인증(pre-auth), ASN.1 인코딩 |
약점 (★ 자주 출제)
- KDC 단일 장애점(SPoF): KDC가 죽으면 아무도 로그인 못 함 → 이중화 필요.
- KDC가 모든 비밀키 보유: KDC 탈취 = 전체 붕괴. 특히 TGS 키(
krbtgt) 탈취 시 아무 TGT나 위조하는 골든 티켓 공격. - 시간 동기화 필수: 타임스탬프를 쓰므로 시계가 어긋나면 인증 실패(NTP 필요).
- 패스워드 추측 공격: AS-REP는 패스워드 유래 키로 암호화되므로 오프라인 사전 대입 가능. 서비스 티켓 크래킹은 Kerberoasting.
- 티켓 캐시 탈취: 클라이언트에 저장된 티켓을 빼내 재사용하는 Pass-the-Ticket.
- 대칭키 기반이라 부인방지 제공 안 함.
SESAME: 유럽에서 Kerberos를 확장, 공개키 암호를 함께 사용하고 권한 정보를 PAC(특권 속성 인증서)로 전달. Kerberos의 키 관리 약점 보완.
2-6. SSO · SAML · OAuth · OIDC 구분
SSO(Single Sign-On): 한 번 인증으로 여러 시스템 이용. 편리하지만 SSO 계정이 뚫리면 전부 뚫림(단일 실패 지점) → 강력한 MFA 필수.
| 구분 | 목적 | 형식 | 핵심 개념 | 한 줄 |
|---|---|---|---|---|
| Kerberos | 인증 + SSO | 바이너리(ASN.1) 티켓 | KDC, TGT | 사내망(AD) SSO |
| SAML 2.0 | 인증(+속성 전달) | XML | IdP, SP, Assertion(어서션) | 기업용 웹 SSO |
| OAuth 2.0 | 인가(권한 위임) | 주로 JSON | Access Token, Scope | "내 사진첩 접근 권한을 앱에 위임" |
| OIDC | 인증 | JWT(ID Token) | OAuth 2.0 위에 인증 계층 | "구글로 로그인" |
- SAML: 사용자(브라우저)가 SP(서비스 제공자)에 접속 → IdP(신원 제공자)로 리다이렉트 → IdP가 인증 후 서명된 XML 어서션(인증·속성·권한결정 어서션) 발급 → SP가 검증.
- OAuth 2.0 역할 4가지: 자원 소유자(사용자), 클라이언트(앱), 인가 서버, 자원 서버. 권한 부여 방식: 인가 코드(+PKCE 권장), 클라이언트 자격증명, 디바이스 코드 등. 암시적(Implicit)·패스워드 방식은 보안상 비권장.
- 핵심 함정: OAuth는 인가(Authorization) 프로토콜이지 인증 프로토콜이 아님. 인증이 필요하면 OIDC.
sequenceDiagram
participant U as 사용자(브라우저)
participant App as 클라이언트 앱
participant AS as 인가 서버
participant RS as 자원 서버
U->>App: 로그인/연동 요청
App->>U: 인가 서버로 리다이렉트
U->>AS: 로그인 + 권한(scope) 동의
AS->>U: 인가 코드 → 앱으로 리다이렉트
App->>AS: 인가 코드 + 클라이언트 인증
AS->>App: Access Token (OIDC면 ID Token 추가)
App->>RS: Access Token으로 API 호출2-7. AAA 서버: RADIUS · TACACS+ · Diameter
원격 접속(VPN, 무선랜, 네트워크 장비 로그인) 시 인증·인가·과금(AAA) 을 중앙에서 처리하는 서버.
| 항목 | RADIUS | TACACS+ | Diameter |
|---|---|---|---|
| 전송 | UDP (1812 인증 / 1813 과금) | TCP 49 | TCP/SCTP 3868 |
| 암호화 범위 | 패스워드만 숨김 | 패킷 본문 전체 | TLS/IPsec(DTLS) 사용 |
| AAA 구조 | 인증+인가 결합 | 인증·인가·과금 분리 | 분리, 확장 가능 |
| 개발 | IETF 표준 | Cisco | IETF (RADIUS 후속) |
| 주 용도 | 무선랜(802.1X), ISP | 네트워크 장비 관리자 명령어 통제 | LTE/5G 이동통신, 대규모 |
| 기타 | 가장 널리 쓰임 | 명령어 단위 인가 가능 | 신뢰성·장애 복구, Peer-to-Peer |
- 이름 말장난: Diameter(지름) = Radius(반지름)의 2배 → 후속 버전이라는 뜻.
2-8. 키 분배 — 왜 어려운가
대칭키는 미리 같은 키를 나눠 가져야 합니다. 사람이 늘어나면 키 개수가 폭발합니다.
✏️ 계산: 필요한 키 개수
- 대칭키: 모든 쌍마다 1개 → n(n−1)/2
- 공개키: 사람마다 (공개키 + 개인키) 1쌍 → 2n 개 (키 쌍으로 세면 n쌍)
| 사용자 수 n | 대칭키 n(n−1)/2 | 공개키 2n |
|---|---|---|
| 10 | 10×9/2 = 45 | 20 |
| 50 | 50×49/2 = 1,225 | 100 |
| 100 | 100×99/2 = 4,950 | 200 |
| 1,000 | 1000×999/2 = 499,500 | 2,000 |
KDC를 쓰면 각 사용자는 KDC와 공유하는 키 1개(마스터키) 만 가지면 되므로 n개로 줄어듭니다. 실제 통신용 세션키는 필요할 때마다 KDC가 만들어 줍니다.
키 계층: 마스터키(KEK, Key Encryption Key) 로 세션키(DEK, Data Encryption Key) 를 암호화해서 전달. 세션키는 한 번 쓰고 폐기 → 유출돼도 피해가 그 세션에 한정.
대칭키 분배 방법 4가지: ① A가 B에게 직접(물리적) 전달 ② 제3자가 A·B에게 전달 ③ 기존 키로 새 키를 암호화해 전달 ④ KDC가 암호화된 채널로 전달.
2-9. Needham-Schroeder 대칭키 프로토콜
KDC 기반 키 분배의 원조(1978). Kerberos의 뿌리입니다. (Ka, Kb = 각자 KDC와 공유한 키, Ks = 새 세션키, Na/Nb = 난수 nonce)
sequenceDiagram
participant A
participant KDC
participant B
A->>KDC: 1. A, B, Na
KDC->>A: 2. {Na, B, Ks, {Ks, A}Kb}Ka
A->>B: 3. {Ks, A}Kb
B->>A: 4. {Nb}Ks
A->>B: 5. {Nb − 1}Ks- 2단계: A는 Na가 돌아온 걸 보고 방금 요청에 대한 응답임을 확인(재전송 방지). {Ks, A}Kb는 A가 열 수 없고 B에게 전달만 함(Kerberos의 "티켓"과 같은 개념).
- 4~5단계: B가 A도 Ks를 가졌는지 확인하는 핸드셰이크.
- 약점(Denning-Sacco 공격): 공격자가 예전 세션키 Ks를 알아냈다면 옛날 3번 메시지를 재전송해 B를 속일 수 있음(B는 그 메시지가 최신인지 알 길이 없음) → 타임스탬프를 넣어 해결 → Kerberos.
- 공개키 버전 Needham-Schroeder에는 Lowe의 중간자 공격(1995)이 발견되어 NSL로 수정됨.
2-10. 공개키 분배 방식 4가지 (★)
공개키는 "공개"라서 비밀 유지는 필요 없지만, "이 공개키가 정말 그 사람 것인가(진위)" 가 문제입니다.
| 방식 | 설명 | 약점 |
|---|---|---|
| ① 공개 발표(Public Announcement) | 자기 공개키를 게시판·메일 서명란에 공표 | 누구나 남인 척 위조 공표 가능 |
| ② 공개 디렉터리(Publicly Available Directory) | 신뢰된 기관이 관리하는 공개 디렉터리에 등록 | 디렉터리 관리자 키가 털리면 위조, 디렉터리 변조 위험 |
| ③ 공개키 관리기관(Public-Key Authority) | 필요할 때마다 기관에 실시간 요청, 기관이 서명해 응답 | 기관이 병목·단일 장애점(매번 온라인 접속 필요) |
| ④ 공개키 인증서(Public-Key Certificate) | CA가 서명한 인증서를 주고받고, 오프라인에서도 검증 | 폐지 관리 필요(CRL/OCSP) → PKI |
진화 순서 그대로 외우세요: 발표 → 디렉터리 → 관리기관 → 인증서. 오늘날 표준은 ④.
2-11. 모듈러 연산 미니 입문 (DH 계산용)
a mod n = a를 n으로 나눈 나머지. 시계 계산과 같습니다(14시 = 2시, 즉 14 mod 12 = 2).
- 덧셈·곱셈 중간에 아무 때나 mod를 해도 결과가 같습니다: (a × b) mod n = ((a mod n) × (b mod n)) mod n
- 그래서 큰 거듭제곱은 제곱을 반복하며 매번 mod 하면 손으로도 계산됩니다.
- 예: 5⁶ mod 23 → 5² = 25 ≡ 2, 5⁴ = (5²)² ≡ 2² = 4, 5⁶ = 5⁴ × 5² ≡ 4 × 2 = 8
2-12. 디피-헬먼(Diffie-Hellman) 키 교환
1976년, 최초의 공개키 개념. 둘이 공개된 통로에서 값만 주고받아도 같은 비밀키를 만들 수 있습니다. 안전성은 이산대수 문제: g, p, gᵃ mod p를 알아도 a를 구하기 어렵다.
비유 — 물감 섞기: 공통 노란색(g)에 각자 비밀색을 섞어 교환 → 받은 색에 다시 자기 비밀색을 섞으면 둘 다 "노랑+빨강+파랑"이 됨. 도청자는 섞인 색만 보고 원래 비밀색을 분리할 수 없음.
sequenceDiagram
participant A as Alice (비밀 a)
participant B as Bob (비밀 b)
Note over A,B: 공개: 소수 p, 생성원 g
A->>B: A = g^a mod p
B->>A: B = g^b mod p
Note over A: K = B^a mod p
Note over B: K = A^b mod p
Note over A,B: 같은 K = g^(ab) mod p✏️ 계산: p = 23, g = 5, a = 6, b = 15
- Alice 공개값 A = 5⁶ mod 23
- 5² = 25 ≡ 2, 5⁴ ≡ 2² = 4, 5⁶ = 5⁴·5² ≡ 4 × 2 = 8 → A = 8
- Bob 공개값 B = 5¹⁵ mod 23
- 5⁸ = (5⁴)² ≡ 4² = 16
- 5¹⁵ = 5⁸ · 5⁴ · 5² · 5¹ ≡ 16 × 4 × 2 × 5 = 640
- 640 = 23 × 27 + 19 → B = 19
- Alice가 계산 K = 19⁶ mod 23
- 19 ≡ −4 (mod 23) → (−4)⁶ = 4⁶ = 4096
- 4096 = 23 × 178 + 2 → K = 2
- Bob이 계산 K = 8¹⁵ mod 23
- 8 = 2³ → 8¹⁵ = 2⁴⁵. 그런데 2¹¹ = 2048 = 23 × 89 + 1 → 2¹¹ ≡ 1
- 45 = 11 × 4 + 1 → 2⁴⁵ ≡ 1⁴ × 2 = 2 → K = 2 ✅
도청자는 p=23, g=5, A=8, B=19만 봅니다. 숫자가 크면(2048비트 이상) 여기서 a나 b를 구하는 것은 사실상 불가능.
특징 정리
- 키 교환(합의) 전용. 그 자체로 암호화·전자서명 기능 없음.
- 인증 기능이 없음 → 중간자(MITM) 공격에 취약.
- 대응: 공개값에 전자서명/인증서를 붙인 인증된 DH(예: TLS의 서명된 ECDHE, IKE, STS 프로토콜).
- 매 세션 새 a, b를 쓰는 임시(Ephemeral) DH = DHE/ECDHE → 전방향 안전성(PFS): 나중에 서버 장기 개인키가 털려도 과거 세션키는 안전.
- 이산대수 문제는 양자컴퓨터의 쇼어 알고리즘에 깨짐 (Day 6).
✏️ 중간자 공격 예시 (같은 p=23, g=5, Mallory 비밀 m=3)
Mallory 공개값 M = 5³ = 125 = 23×5 + 10 → M = 10
sequenceDiagram
participant A as Alice (a=6)
participant M as Mallory (m=3)
participant B as Bob (b=15)
A->>M: A = 8 (Bob에게 보냈지만 가로챔)
M->>B: M = 10 (Alice인 척)
B->>M: B = 19 (Alice에게 보냈지만 가로챔)
M->>A: M = 10 (Bob인 척)
Note over A,M: Alice: 10^6 mod 23 = 6 / Mallory: 8^3 mod 23 = 6
Note over M,B: Bob: 10^15 mod 23 = 5 / Mallory: 19^3 mod 23 = 5- Alice 계산: 10² = 100 ≡ 8, 10⁴ ≡ 8² = 64 ≡ 18, 10⁶ ≡ 18 × 8 = 144 ≡ 6 / Mallory: 8³ = 512 = 23×22 + 6 → 6 ✔
- Bob 계산: 10⁸ ≡ 18² = 324 ≡ 2, 10¹⁵ = 10⁸·10⁴·10²·10 ≡ 2×18×8×10 = 2880 = 23×125 + 5 → 5 / Mallory: 19³ ≡ (−4)³ = −64 ≡ −64 + 69 = 5 ✔
- 결과: Alice–Mallory는 키 6, Mallory–Bob은 키 5. Mallory가 중간에서 복호화 → 열람/변조 → 재암호화해도 둘은 눈치채지 못함. 원인은 공개값의 출처를 인증하지 않았기 때문.
⚠️ 시험 함정 (Day 2)
- Kerberos는 대칭키 기반. "공개키 기반 인증서 사용"은 오답(공개키 확장은 SESAME, PKINIT).
- Kerberos의 재전송 방지 수단은 타임스탬프(+Authenticator). "시퀀스 번호"는 오답 보기로 자주 등장.
- TGT는 TGS 키로 암호화 → 사용자가 열어볼 수 없음. "사용자 키로 암호화"는 오답.
- OAuth = 인가, OIDC = 인증. "OAuth 2.0은 사용자 인증 표준"은 오답.
- RADIUS = UDP, 패스워드만 암호화 / TACACS+ = TCP, 전체 암호화. 바꿔 낸 보기 주의.
- FAR = 타인 수락(보안 위험), FRR = 본인 거부(불편). 1종/2종 오류 이름 혼동 주의.
- 디피-헬먼은 암호화·서명 기능이 없음, 이산대수 기반(소인수분해 ✗), 약점은 중간자 공격.
- 공개키 분배 방식 중 관리기관 방식의 약점 = 병목(실시간 접속 필요). 인증서는 오프라인 검증 가능.
- 대칭키 개수는 n(n−1)/2이지 n²/2나 n(n+1)/2가 아님.
📌 기출 포인트 (Day 2)
- Kerberos 구성요소(AS, TGS, TGT)와 메시지 순서, 그리고 약점(시간 동기화, KDC 단일 장애점, 패스워드 추측) 고르기.
- "다음 중 Kerberos 특징이 아닌 것" 형태로 공개키 사용·부인방지 제공 같은 오답을 끼워 넣기.
- 사용자 수를 주고 대칭키/공개키 필요 개수 계산.
- 디피-헬먼의 기반 문제, 취약점, 대응책을 묻는 문제.
- OTP 방식(시간 동기화·이벤트 동기화·질의응답)과 S/Key 원리, 바이오 인증 FAR/FRR/CER 해석.
- RADIUS·TACACS+·Diameter의 프로토콜/암호화 범위 비교, SAML/OAuth/OIDC 용도 구분.
📝 확인 문제 (Day 2)
Q1. Kerberos에 대한 설명으로 옳지 않은 것은?
① KDC는 AS와 TGS로 구성된다
② TGT는 TGS의 비밀키로 암호화되어 사용자는 내용을 볼 수 없다
③ 공개키 서명을 이용하므로 부인방지 기능을 제공한다
④ 타임스탬프를 사용하므로 시스템 간 시간 동기화가 필요하다
정답: ③
- ① 맞음: KDC = AS + TGS.
- ② 맞음: TGT = {…}K_tgs.
- ③ 틀림(정답): Kerberos는 대칭키 기반이라 키를 KDC와 공유하므로 부인방지 불가.
- ④ 맞음: Authenticator의 타임스탬프 검증 때문에 시계 동기화 필수.
Q2. 사용자 200명이 서로 1:1 비밀통신을 할 때 대칭키 방식과 공개키 방식에 필요한 키의 개수로 옳은 것은?
① 19,900개 / 400개 ② 20,000개 / 200개 ③ 39,800개 / 400개 ④ 19,900개 / 200개
정답: ①
- 대칭키: 200 × 199 / 2 = 39,800 / 2 = 19,900
- 공개키: 2 × 200 = 400 (공개키 200 + 개인키 200)
- ② 틀림: n²/2로 잘못 계산. ③ 틀림: 2로 나누지 않음. ④ 틀림: 공개키를 키 쌍 수(n)로만 셈 — 문제에서 "키의 개수"이므로 2n.
Q3. p = 11, g = 2인 디피-헬먼 키 교환에서 A의 비밀값 a = 3, B의 비밀값 b = 4일 때 공유키는?
① 3 ② 5 ③ 9 ④ 4
정답: ④
- A 공개값 = 2³ mod 11 = 8, B 공개값 = 2⁴ mod 11 = 16 − 11 = 5
- A측: K = 5³ mod 11 = 125 mod 11 = 125 − 121 = 4
- B측: K = 8⁴ mod 11 → 8² = 64 ≡ 9, 9² = 81 ≡ 4 → 4 ✅
- 검산: g^(ab) = 2¹² = 4096 = 11 × 372 + 4 → 4
- ① 틀림: a값 자체. ② 틀림: B의 공개값. ③ 틀림: 8² mod 11의 중간값(계산 도중 멈춘 실수).
Q4. OAuth 2.0과 OIDC에 대한 설명으로 옳은 것은?
① OAuth 2.0은 사용자 인증을 위한 XML 기반 표준이다
② OIDC는 OAuth 2.0 위에 인증 계층을 추가하고 ID Token(JWT)을 발급한다
③ SAML은 JSON 기반 토큰을 사용하는 권한 위임 프로토콜이다
④ OAuth 2.0에서는 암시적(Implicit) 그랜트 사용이 가장 권장된다
정답: ②
- ① 틀림: OAuth는 인가(권한 위임) 프레임워크이며 XML 기반은 SAML.
- ② 맞음.
- ③ 틀림: SAML은 XML 어서션 기반 인증(SSO) 표준.
- ④ 틀림: 암시적 그랜트는 토큰 노출 위험으로 비권장, 인가 코드 + PKCE 권장.
Q5. 바이오 인증 시스템의 성능 지표에 대한 설명으로 옳은 것은?
① FRR은 등록되지 않은 타인을 본인으로 잘못 수락하는 비율이다
② 보안이 매우 중요한 시설에서는 FAR을 낮추는 방향으로 임계값을 설정한다
③ CER이 높을수록 정확한 시스템이다
④ 임계값을 엄격하게 하면 FAR과 FRR이 모두 감소한다
정답: ②
- ① 틀림: 타인 수락은 FAR. FRR은 본인 거부.
- ② 맞음: 타인 수락(FAR)이 곧 보안 사고이므로.
- ③ 틀림: CER(EER)은 낮을수록 정확.
- ④ 틀림: 엄격하게 하면 FAR↓ FRR↑ (트레이드오프).
Q6. 공개키 분배 방식 중 "사용자가 필요할 때마다 신뢰기관에 접속해 상대의 공개키를 받아오는 방식"의 단점으로 가장 적절한 것은?
① 누구나 타인을 사칭해 공개키를 게시할 수 있다
② 기관이 병목 지점이 되고 항상 온라인이어야 한다
③ 인증서 폐지 목록을 관리해야 한다
④ 키 교환 과정에서 중간자 공격을 원천적으로 막을 수 없다
정답: ②
- ① 틀림: 공개 발표 방식의 약점.
- ② 맞음: 공개키 관리기관(Public-Key Authority) 방식의 약점.
- ③ 틀림: 인증서(PKI) 방식의 관리 부담.
- ④ 틀림: 인증 없는 DH의 약점이며, 관리기관 방식은 기관 서명으로 진위를 확인함.
Day 3 · 대칭키 암호 심화
3-1. 암호 설계의 기본 원리
- 케르크호프스 원리(Kerckhoffs): 암호 알고리즘은 공개돼도 안전해야 하며, 비밀은 오직 키에만 의존해야 한다. (그래서 AES·ARIA는 설계를 전부 공개)
- 샤논(Shannon)의 두 원칙
- 혼돈(Confusion): 키와 암호문의 관계를 복잡하게 → 주로 치환(Substitution, S-box) 이 담당
- 확산(Diffusion): 평문 1비트 변화가 암호문 여러 비트로 퍼지게 → 주로 전치/순열(Permutation, P-box), 선형 변환이 담당
- 쇄도 효과(Avalanche Effect): 평문이나 키 1비트를 바꾸면 암호문 비트의 약 절반이 바뀌어야 함.
- 곱 암호(Product Cipher): 약한 치환·전치를 여러 라운드 반복해 강하게 만듦. 현대 블록 암호는 모두 곱 암호.
| 고전 기법 | 원리 | 예 |
|---|---|---|
| 치환(Substitution) | 글자를 다른 글자로 바꿈 | 카이사르, 비즈네르, 플레이페어 |
| 전치(Transposition) | 글자의 위치(순서)를 바꿈 | 스키테일, 레일펜스 |
3-2. 블록 암호 vs 스트림 암호
| 구분 | 블록 암호 | 스트림 암호 |
|---|---|---|
| 처리 단위 | 고정 길이 블록(64/128비트) | 비트·바이트 단위 |
| 원리 | 라운드 함수 반복(치환+전치) | 키스트림 ⊕ 평문 |
| 속도/구현 | 소프트웨어에 유리 | 하드웨어에 유리, 빠름 |
| 오류 전파 | 모드에 따라 다름 | 대체로 없음(해당 비트만) |
| 대표 | DES, AES, SEED, ARIA, LEA | RC4, A5/1, ChaCha20, LFSR 기반 |
| 주 용도 | 일반 데이터 | 실시간 통신, 무선, 음성 |
3-3. Feistel 구조 vs SPN 구조 (★)
Feistel 구조: 블록을 왼쪽(L)·오른쪽(R) 절반으로 나눕니다. 각 라운드에서 오른쪽 절반을 라운드 함수 F에 넣고, 그 결과를 왼쪽 절반에 XOR한 뒤 좌우를 교환합니다.
L(i-1) R(i-1)
│ │
│ ┌──────────┤
│ ▼ │
│ ┌─────────┐ │
│ │ F(·,Ki) │◄─ 라운드키 Ki
│ └────┬────┘ │
▼ │ │
(⊕)◄──────┘ │
│ │
└──────╲ ╱────────┘
╳ (좌우 교환)
┌──────╱ ╲────────┐
▼ ▼
L(i) = R(i-1) R(i) = L(i-1) ⊕ F(R(i-1), Ki)
- 핵심 장점: 복호화는 같은 구조에 라운드키 순서만 거꾸로 넣으면 됩니다. F 함수 자체가 역함수를 가질 필요가 없습니다(XOR를 두 번 하면 원래대로 돌아오기 때문). → 하드웨어 한 벌로 암·복호화.
- 단점: 한 라운드에 절반만 변하므로 SPN보다 라운드가 더 필요. 병렬성 낮음.
- 사용: DES, SEED, Blowfish, Camellia, (변형 Feistel) HIGHT, Twofish, RC5.
SPN 구조(Substitution-Permutation Network): 블록 전체에 매 라운드 ① 라운드키 XOR → ② S-box 치환(혼돈) → ③ P-box 순열/선형 변환(확산) 을 적용.
평문 블록 ──► [⊕ K0] ──► [S][S][S][S] ──► [ 순열/확산 ] ──► [⊕ K1] ──► … ──► 암호문
(치환: 혼돈) (선형: 확산)
- 장점: 한 라운드에 블록 전체가 변환 → 라운드 수 적고 병렬 처리 유리.
- 단점: 복호화 시 S-box·확산층의 역연산이 따로 필요(구현 2벌).
- 사용: AES, ARIA(ISPN: 역연산이 자기 자신인 인볼루션 구조로 단점 보완), PRESENT.
| 항목 | Feistel | SPN |
|---|---|---|
| 라운드마다 변환 | 절반 | 전체 |
| 라운드 함수 역함수 | 불필요 | 필요 |
| 암·복호화 구조 | 동일(키 순서만 역순) | 다름(역연산 필요) |
| 라운드 수 | 많음(DES 16) | 적음(AES-128 10) |
| 병렬성 | 낮음 | 높음 |
| 예 | DES, SEED, Blowfish, Camellia | AES, ARIA, PRESENT |
기타 구조: Lai-Massey(IDEA: XOR, mod 2¹⁶ 덧셈, mod 2¹⁶+1 곱셈 세 연산 혼합), ARX(Addition-Rotation-XOR만 사용 → 경량·고속: LEA, HIGHT, CHAM, ChaCha20).
3-4. DES와 3DES
DES (Data Encryption Standard) — 1977년 미국 표준(IBM 루시퍼 기반).
| 항목 | 값 |
|---|---|
| 블록 | 64비트 |
| 키 | 64비트 중 8비트는 패리티 → 실제 56비트 |
| 구조 | Feistel 16라운드 |
| 라운드키 | 48비트 × 16개 |
| 라운드 함수 F | 확장(E: 32→48비트) → 라운드키 XOR → S-box 8개(각 6비트→4비트, 유일한 비선형 요소) → P-box 순열 |
| 전후 처리 | 초기 순열(IP) … 최종 순열(IP⁻¹) |
- 56비트 키 = 2⁵⁶ ≈ 7.2 × 10¹⁶가지 → 1998년 EFF의 전용 장비 Deep Crack이 56시간 만에 해독, 1999년 22시간. → 전수조사(Brute Force)로 깨짐.
- 2중 DES는 키가 112비트처럼 보이지만 중간일치(Meet-in-the-Middle) 공격으로 약 2⁵⁷ 수준밖에 안 됨 → 그래서 3중으로 감.
3DES (Triple DES, TDEA): C = E_K3( D_K2( E_K1(P) ) ) — 암호화-복호화-암호화(EDE)
- 키 2개(K1=K3): 112비트 키, 키 3개: 168비트 키. (중간일치 공격 때문에 실효 강도는 각각 약 80비트, 112비트)
- 가운데를 D로 하는 이유: K1=K2=K3로 두면 단일 DES와 호환됨.
- 단점: DES를 3번 → 느림, 블록 64비트라 대용량에서 생일 공격(Sweet32) 위험 → 현재 AES로 대체, 미국 NIST는 신규 사용 금지.
3-5. AES (★)
AES (Advanced Encryption Standard) — 2001년 미국 표준(FIPS 197). 공모전에서 벨기에의 Rijndael(레인달) 이 선정(결선: MARS, RC6, Serpent, Twofish).
| 키 길이 | 라운드 수 | 블록 |
|---|---|---|
| 128비트 | 10 | 128비트 고정 |
| 192비트 | 12 | 128비트 |
| 256비트 | 14 | 128비트 |
상태(State): 128비트 = 16바이트를 4×4 바이트 행렬로 놓고 연산 (열 단위로 채움).
┌────┬────┬────┬────┐
│ b0 │ b4 │ b8 │ b12│ ← 0행: 이동 없음
├────┼────┼────┼────┤
│ b1 │ b5 │ b9 │ b13│ ← 1행: 왼쪽으로 1바이트
├────┼────┼────┼────┤
│ b2 │ b6 │ b10│ b14│ ← 2행: 왼쪽으로 2바이트
├────┼────┼────┼────┤
│ b3 │ b7 │ b11│ b15│ ← 3행: 왼쪽으로 3바이트
└────┴────┴────┴────┘
라운드 함수 4단계
| 단계 | 하는 일 | 역할 |
|---|---|---|
| SubBytes | 각 바이트를 S-box 표로 치환 (GF(2⁸) 곱셈 역원 + 아핀 변환) | 혼돈 (유일한 비선형) |
| ShiftRows | 행 r을 왼쪽으로 r바이트 순환 이동 | 확산 (열 간 섞기) |
| MixColumns | 각 열(4바이트)에 GF(2⁸) 위 행렬 곱 | 확산 (열 안 섞기) |
| AddRoundKey | 라운드키와 XOR | 키 결합 (유일하게 키 사용) |
flowchart TD
P[평문 128비트] --> K0["AddRoundKey (K0) — 초기 라운드"]
K0 --> R["라운드 1 ~ Nr-1
SubBytes → ShiftRows → MixColumns → AddRoundKey"]
R --> F["마지막 라운드 Nr
SubBytes → ShiftRows → AddRoundKey
(MixColumns 생략)"]
F --> C[암호문 128비트]- 마지막 라운드에는 MixColumns가 없습니다(시험 단골).
- 처음에 AddRoundKey가 한 번 더 있으므로 라운드키는 Nr + 1개 필요(AES-128: 11개 = 44워드).
- 구조: SPN(Feistel 아님). 바이트 단위 연산이라 8비트 칩부터 64비트 CPU까지 효율적.
3-6. 국산 및 기타 블록 암호
| 알고리즘 | 블록 | 키 | 라운드 | 구조 | 개발/표준 | 비고 |
|---|---|---|---|---|---|---|
| SEED | 128 | 128 (SEED 256: 256) | 16 (256: 24) | Feistel | KISA, 1999 / TTA, ISO/IEC 18033-3 | 국내 금융·전자상거래 |
| ARIA | 128 | 128/192/256 | 12/14/16 | SPN(ISPN, 인볼루션) | 국가보안기술연구소(NSR) 주도, 2004 / KS X 1213 | 국가 표준, 공공 |
| HIGHT | 64 | 128 | 32 | 변형 Feistel(ARX) | 2005 / TTA, ISO/IEC 18033-3 | 경량: RFID·센서 |
| LEA | 128 | 128/192/256 | 24/28/32 | ARX | NSR, 2013 / KS X 3246, ISO/IEC 29192-2 | 경량+고속, SW 성능 우수 |
| CHAM | 64/128 | 128/256 | 다양 | ARX(변형 Feistel) | NSR, 2017 | 초경량 IoT |
| IDEA | 64 | 128 | 8 + 출력변환(8.5) | Lai-Massey 계열 | 스위스(Lai·Massey) | PGP 사용 |
| Blowfish | 64 | 32~448 | 16 | Feistel | 슈나이어 | 무료 공개, bcrypt의 기반 |
| Skipjack | 64 | 80 | 32 | 비평형 Feistel | 미국 NSA | 클리퍼 칩(키 위탁) |
| Camellia | 128 | 128/192/256 | 18/24 | Feistel | 일본 | ISO 표준 |
- 이름 풀이: ARIA = Academy(학계), Research Institute(연구소), Agency(정부기관)가 공동 개발.
- 시험 단골: "64비트 블록을 쓰는 국산 경량 암호" = HIGHT, "ARX 구조 128비트 블록 국산 고속 경량" = LEA, "SPN 구조 국가표준" = ARIA, "Feistel 구조 128비트 국산" = SEED.
3-7. 스트림 암호: OTP · LFSR · RC4
OTP (One-Time Pad, 버냄 암호): 평문과 같은 길이의 완전 난수 키를 한 번만 XOR. 샤논이 증명한 완전 비밀성(Perfect Secrecy) — 이론상 해독 불가. 그러나 키 길이 = 메시지 길이라 키 분배가 비현실적, 키를 재사용하면 C1 ⊕ C2 = P1 ⊕ P2가 되어 깨짐.
현실의 스트림 암호는 짧은 키 → 긴 의사난수 키스트림을 만들어 OTP를 흉내 냅니다.
LFSR (선형 피드백 시프트 레지스터): 레지스터의 몇 비트를 XOR해서 새 비트를 밀어 넣는 간단한 하드웨어 난수 생성기.
✏️ 예시: 3비트 LFSR, 점화식 sₙ₊₃ = sₙ₊₁ ⊕ sₙ (다항식 x³ + x + 1)
초기값 s₀=1, s₁=0, s₂=0
| n | 계산 | sₙ |
|---|---|---|
| 3 | s₁ ⊕ s₀ = 0 ⊕ 1 | 1 |
| 4 | s₂ ⊕ s₁ = 0 ⊕ 0 | 0 |
| 5 | s₃ ⊕ s₂ = 1 ⊕ 0 | 1 |
| 6 | s₄ ⊕ s₃ = 0 ⊕ 1 | 1 |
| 7 | s₅ ⊕ s₄ = 1 ⊕ 0 | 1 |
| 8 | s₆ ⊕ s₅ = 1 ⊕ 1 | 0 |
| 9 | s₇ ⊕ s₆ = 1 ⊕ 1 | 0 |
출력: 1 0 0 1 0 1 1 | 1 0 0 … → s₇,s₈,s₉ = 1,0,0 = 처음 상태와 같으므로 주기 7 = 2³ − 1 (n비트 LFSR의 최대 주기 = 2ⁿ − 1, 모두 0인 상태 제외).
- 약점: 선형이라 출력 2n비트만 알면 Berlekamp-Massey 알고리즘으로 구조 전체 복원 가능 → 단독 사용 금지, 여러 LFSR을 비선형 결합(A5/1: GSM 휴대폰)하거나 비선형 필터를 씀.
RC4: 1987년 리베스트. 바이트 단위, 키 40~2048비트 가변. KSA(키 스케줄링: 256바이트 S배열 섞기) → PRGA(키스트림 생성). 매우 빠르고 단순해 WEP, WPA-TKIP, 구 SSL/TLS에서 쓰였으나 초기 키스트림 편향 등 취약점으로 WEP 해독, TLS에서 사용 금지(RFC 7465).
- 현대 대안: ChaCha20(ARX 기반, TLS 1.3에서 ChaCha20-Poly1305 AEAD로 사용).
3-8. 블록 암호 운영 모드 (★★)
블록 암호는 128비트씩만 처리하므로, 긴 메시지를 어떻게 연결해서 처리할지 정한 것이 운영 모드입니다. (E = 암호화, D = 복호화, P = 평문 블록, C = 암호문 블록)
① ECB (Electronic Codebook) — C_i = E(P_i)
P1 P2 P3
│ │ │
[E] [E] [E]
│ │ │
C1 C2 C3 같은 P → 같은 C (패턴 노출!)
- 가장 단순, 병렬 가능. 하지만 같은 평문 블록 = 같은 암호문 블록 → 이미지 윤곽이 그대로 보이는 "ECB 펭귄". 블록 재배열·대체 공격 가능. 사용 비권장.
② CBC (Cipher Block Chaining) — C_i = E(P_i ⊕ C_(i−1)), C_0 = IV
P1 P2 P3
│ │ │
IV ──►(⊕) ┌─────►(⊕) ┌─────►(⊕)
│ │ │ │ │
[E] │ [E] │ [E]
│ │ │ │ │
C1 ───┘ C2 ───┘ C3
- 복호화: P_i = D(C_i) ⊕ C_(i−1)
- IV(초기화 벡터) 필요 — 예측 불가능한 난수여야 함(비밀일 필요는 없음).
- 같은 평문도 IV가 다르면 다른 암호문. 암호화는 순차(병렬 ✗), 복호화는 병렬 ○.
- 마지막 블록은 앞의 모든 블록에 의존 → CBC-MAC의 원리. 패딩 오라클 공격 주의.
③ CFB (Cipher Feedback) — C_i = P_i ⊕ E(C_(i−1))
IV ──►[E] ┌──►[E] ┌──►[E]
│ │ │ │ │
P1 ──►(⊕) │ P2►(⊕) │ P3►(⊕)
│ │ │ │ │
C1 ────┘ C2 ────┘ C3
- 이전 암호문을 암호화해 키스트림으로 사용 → 블록 암호를 자기 동기식 스트림 암호처럼. 패딩 불필요.
- 복호화에도 E만 사용(D 불필요).
④ OFB (Output Feedback) — O_i = E(O_(i−1)), O_0 = IV, C_i = P_i ⊕ O_i
IV ──►[E]──►[E]──►[E] ← 키스트림은 평문/암호문과 무관하게 E 출력만 되먹임
│ │ │
P1 ──►(⊕) P2►(⊕) P3►(⊕)
│ │ │
C1 C2 C3
- 키스트림을 미리 계산 가능, 오류 전파 없음 → 위성·무선처럼 잡음 많은 채널.
- 같은 IV·키 재사용 시 키스트림이 같아져 치명적. 암호문 비트를 뒤집으면 평문 같은 비트가 뒤집힘(비트 플리핑 공격 가능 → 무결성은 별도 보장 필요).
⑤ CTR (Counter) — C_i = P_i ⊕ E(Nonce ‖ Counter_i)
Nonce‖1 Nonce‖2 Nonce‖3
│ │ │
[E] [E] [E]
│ │ │
P1►(⊕) P2►(⊕) P3►(⊕)
│ │ │
C1 C2 C3 ← 블록끼리 서로 독립
- 각 블록이 독립 → 암·복호화 모두 병렬, 원하는 블록만 랜덤 접근(i번째 블록만 복호화) 가능. 패딩 불필요, E만 사용.
- (Nonce, 카운터) 조합은 절대 재사용 금지. 고속 네트워크·디스크에 널리 쓰임, GCM의 기반.
운영 모드 비교표
| 항목 | ECB | CBC | CFB | OFB | CTR |
|---|---|---|---|---|---|
| IV/Nonce | ✗ | ○ | ○ | ○ | ○(Nonce) |
| 같은 평문→같은 암호문 | ○(취약) | ✗ | ✗ | ✗ | ✗ |
| 암호화 병렬 | ○ | ✗ | ✗ | ✗ | ○ |
| 복호화 병렬 | ○ | ○ | ○ | ✗ | ○ |
| 랜덤 접근 | ○ | ○(복호) | ○(복호) | ✗ | ○ |
| 패딩 필요 | ○ | ○ | ✗ | ✗ | ✗ |
| 복호화에 쓰는 함수 | D | D | E | E | E |
| 스트림 방식 | ✗ | ✗ | ○(자기동기) | ○(동기) | ○(동기) |
✏️ 오류 전파 연습: 전송 중 암호문 C2의 1비트가 깨졌다면?
| 모드 | P2 | P3 | P4 이후 | 이유 |
|---|---|---|---|---|
| ECB | 블록 전체 깨짐 | 정상 | 정상 | D(C2)만 영향 |
| CBC | 블록 전체 깨짐 | 같은 위치 1비트만 뒤집힘 | 정상 | P3 = D(C3) ⊕ C2 이므로 C2의 오류 비트가 그대로 XOR |
| CFB | 같은 위치 1비트만 | 블록 전체 깨짐 | 정상 | P2 = C2 ⊕ E(C1): XOR로 1비트 / P3 = C3 ⊕ E(C2): E를 통과해 전체 |
| OFB | 1비트만 | 정상 | 정상 | 키스트림은 암호문과 무관 |
| CTR | 1비트만 | 정상 | 정상 | 블록 독립, XOR만 |
요령: CBC와 CFB는 "2블록" 영향(순서가 반대), ECB는 1블록 전체, OFB·CTR은 1비트. 단, CBC에서 평문 1비트를 잘못 입력한 경우는 이후 모든 암호문이 달라지지만 복호화하면 그 평문 비트만 틀린 채 정상 복원됩니다(오류 "전파"와 구분).
패딩 (Padding)
ECB·CBC는 평문이 블록 크기의 배수여야 해서 끝을 채웁니다. 가장 흔한 PKCS#7: 부족한 바이트 수 N을 값 N으로 N번 채움.
블록 8바이트, 평문 "HELLO"(5바이트) → 3바이트 부족
48 45 4C 4C 4F | 03 03 03
평문이 정확히 8바이트라면 → 08 08 08 08 08 08 08 08 (한 블록 통째로 추가)
- 정확히 맞아떨어져도 한 블록을 추가하는 이유: 복호화 측에서 마지막 바이트가 패딩인지 데이터인지 모호하지 않게.
- 패딩 오라클 공격: 서버가 "패딩 오류"와 "기타 오류"를 다르게 응답하면, 공격자가 CBC 암호문을 조작해 반복 질의하는 것만으로 평문을 복원(POODLE, Lucky13 계열). 대응: 오류 응답 통일, MAC 먼저 검증(Encrypt-then-MAC), AEAD 사용.
인증 암호화 (AEAD) 및 기타 모드
| 모드 | 구성 | 특징 |
|---|---|---|
| GCM (Galois/Counter Mode) | CTR 암호화 + GHASH 인증 | 병렬·고속, TLS 1.3 기본(AES-GCM) |
| CCM | CTR + CBC-MAC | 무선(802.11i WPA2-CCMP), 2패스 |
| XTS | 디스크 섹터 암호화 | BitLocker 등 저장장치 |
AEAD는 기밀성 + 무결성 + 인증을 한 번에 제공. 패딩 오라클·비트 플리핑 같은 공격을 원천 차단합니다.
3-9. 암호 분석(공격) 유형 (★)
① 공격자가 가진 정보에 따른 분류 (아래로 갈수록 공격자에게 유리 = 강한 공격 모델)
| 공격 | 공격자가 가진 것 | 예 |
|---|---|---|
| 암호문 단독 공격 (COA) | 암호문만 | 빈도 분석 |
| 기지 평문 공격 (KPA) | 평문-암호문 쌍 몇 개(우연히 획득) | 선형 공격, 2차대전 에니그마 |
| 선택 평문 공격 (CPA) | 원하는 평문을 골라 암호화시킬 수 있음 | 차분 공격, 공개키 암호는 기본적으로 CPA 가능 |
| 선택 암호문 공격 (CCA) | 원하는 암호문을 골라 복호화시킬 수 있음 | 패딩 오라클, RSA 교재식 공격 |
② 분석 기법
| 기법 | 설명 |
|---|---|
| 전수 공격(Brute Force) | 모든 키를 시도. k비트 키 → 최대 2ᵏ번, 평균 2ᵏ⁻¹번 |
| 차분 공격 (Differential) | 1990 비함·샤미르. 평문 쌍의 차이(XOR) 가 암호문 차이로 어떻게 전파되는지 통계 분석 → 선택 평문 |
| 선형 공격 (Linear) | 1993 마쓰이(Matsui). 평문·암호문·키 비트 사이의 선형 근사식 이용 → 기지 평문. DES를 2⁴³ 평문으로 해독 |
| 중간 일치 (MITM) | 양쪽에서 계산해 가운데서 맞춰봄 → 2중 DES 무력화 |
| 생일 공격 | 충돌 찾기에 2^(n/2) (Day 5) |
| 부채널(사이드 채널) 공격 | 알고리즘이 아니라 구현의 물리 정보 이용: 시간(Timing), 전력(SPA/DPA), 전자파, 소리, 캐시 |
| 오류 주입(Fault) 공격 | 전압·레이저로 일부러 오류를 내 결과 비교 |
| 사전/레인보우 테이블 | 패스워드 해시 대상 (Day 5) |
✏️ 계산: 전수 공격 시간
- 초당 10⁹(10억)개 키 시도 가능한 장비 1대 기준
- DES 2⁵⁶ ≈ 7.2 × 10¹⁶ → 7.2 × 10⁷초 ≈ 약 2.3년 (평균은 절반 ≈ 1.1년). 장비 1,000대면 약 1일 미만.
- AES-128: 2¹²⁸ ≈ 3.4 × 10³⁸ → 3.4 × 10²⁹초 ≈ 우주 나이(약 4.3 × 10¹⁷초)의 약 8 × 10¹¹배 → 사실상 불가능.
- 키가 1비트 늘 때마다 전수 공격 시간은 2배.
⚠️ 시험 함정 (Day 3)
- AES는 SPN, SEED는 Feistel, ARIA는 SPN. "AES는 Feistel" 보기 단골.
- AES 블록은 항상 128비트. 키만 128/192/256. "AES-256은 256비트 블록" → ✗.
- AES 마지막 라운드에는 MixColumns 없음. 라운드 수 10/12/14.
- DES 키는 56비트(64비트는 패리티 포함). 라운드키 48비트, S-box 8개(6→4).
- Feistel은 F 함수가 역함수 불필요, SPN은 역연산 필요.
- CTR = 병렬·랜덤 접근, OFB = 오류 전파 없음, ECB = 패턴 노출, CBC = 암호화 병렬 불가.
- CFB/OFB/CTR은 패딩 불필요, 복호화에도 암호화 함수 E를 씀.
- 차분 = 선택 평문, 선형 = 기지 평문. 바꿔치기 보기 주의.
- HIGHT는 64비트 블록(다른 국산은 128비트).
- 3DES의 가운데 단계는 복호화(D).
📌 기출 포인트 (Day 3)
- 블록 암호 알고리즘별 블록/키/라운드/구조 연결하기(특히 국산 SEED·ARIA·HIGHT·LEA).
- 운영 모드 설명을 주고 이름 맞히기(병렬성, IV, 오류 전파, 패딩 필요 여부).
- AES 라운드 4단계의 이름·역할·순서, 마지막 라운드의 차이.
- 공격자 정보 수준에 따른 4가지 공격 구분, 차분/선형 공격의 공격 모델.
- 혼돈과 확산, Feistel 구조의 특징 묻기.
- 스트림 암호(RC4)의 사용처(WEP)와 취약성, OTP 조건.
📝 확인 문제 (Day 3)
Q1. AES에 대한 설명으로 옳지 않은 것은?
① 블록 크기는 키 길이와 관계없이 128비트이다
② AES-192의 라운드 수는 12이다
③ 마지막 라운드에서는 ShiftRows 연산이 생략된다
④ SubBytes는 S-box를 이용한 비선형 치환이다
정답: ③
- ① 맞음.
- ② 맞음: 10/12/14.
- ③ 틀림(정답): 마지막 라운드에서 생략되는 것은 MixColumns.
- ④ 맞음: AES에서 유일한 비선형 단계.
Q2. 다음 설명에 해당하는 블록 암호 운영 모드는?
"각 블록이 카운터 값의 암호화 결과와 XOR되어 독립적으로 처리되므로 암·복호화 모두 병렬 처리가 가능하고 특정 블록만 복호화할 수 있다."
① CBC ② OFB ③ CTR ④ CFB
정답: ③
- ① 틀림: CBC는 암호화가 순차적.
- ② 틀림: OFB는 키스트림이 이전 출력에 의존해 순차적이고 랜덤 접근 불가.
- ③ 맞음.
- ④ 틀림: CFB는 이전 암호문에 의존해 암호화가 순차적.
Q3. CBC 모드로 암호화된 메시지 전송 중 암호문 블록 C3의 한 비트가 변조되었다. 복호화 결과에 대한 설명으로 옳은 것은?
① P3만 블록 전체가 손상된다
② P3 전체와 P4의 대응 비트가 손상되고 P5 이후는 정상이다
③ P3 이후 모든 평문 블록이 손상된다
④ P3의 해당 비트 하나만 손상된다
정답: ②
- ① 틀림: ECB의 경우.
- ② 맞음: P3 = D(C3) ⊕ C2 → 전체 손상, P4 = D(C4) ⊕ C3 → 같은 위치 1비트 반전, P5 = D(C5) ⊕ C4 → 정상.
- ③ 틀림: CBC 복호화는 자기 회복(self-recovering)된다.
- ④ 틀림: OFB·CTR의 경우.
Q4. 국산 블록 암호에 대한 연결로 옳지 않은 것은?
① SEED – 128비트 블록, Feistel 구조
② ARIA – 128비트 블록, SPN 구조, 키 128/192/256비트
③ HIGHT – 128비트 블록, SPN 구조의 고속 암호
④ LEA – 128비트 블록, ARX 연산 기반 경량 암호
정답: ③
- ③ 틀림(정답): HIGHT는 64비트 블록, 128비트 키, 32라운드, 변형 Feistel(ARX 연산) 구조의 경량 암호.
- ①②④는 올바른 연결.
Q5. 공격자가 임의로 선택한 평문을 암호화한 결과를 얻을 수 있다고 가정하는 공격 모델과, 이 모델을 사용하는 대표적 분석 기법이 바르게 짝지어진 것은?
① 기지 평문 공격 – 선형 공격
② 선택 평문 공격 – 차분 공격
③ 선택 암호문 공격 – 선형 공격
④ 암호문 단독 공격 – 차분 공격
정답: ②
- ① 틀림: 짝은 맞지만 질문의 "평문을 선택"하는 모델이 아님(기지 평문은 우연히 얻은 쌍).
- ② 맞음: 차분 분석은 원하는 차이를 갖는 평문 쌍을 골라 암호화해야 하므로 선택 평문.
- ③ 틀림: 선형 공격은 기지 평문 공격.
- ④ 틀림: 암호문만으로는 차분 분석 불가.
Q6. Feistel 구조에 대한 설명으로 옳은 것은?
① 라운드 함수 F는 반드시 역함수가 존재해야 한다
② 매 라운드마다 블록 전체가 치환된다
③ 복호화는 암호화와 같은 구조에 라운드키를 역순으로 적용한다
④ AES와 ARIA가 대표적인 Feistel 구조이다
정답: ③
- ① 틀림: XOR의 성질 덕분에 F는 역함수가 필요 없음.
- ② 틀림: 절반만 변환(전체 변환은 SPN).
- ③ 맞음.
- ④ 틀림: AES·ARIA는 SPN. Feistel 예는 DES·SEED.
Day 4 · 공개키 암호 심화
4-1. 공개키 암호의 핵심: 일방향 함정문 함수
공개키 암호의 기본 개념(공개키로 암호화 → 개인키로 복호화, 개인키로 서명 → 공개키로 검증)은 Week03_보안 개념과 암호 기초에서 다뤘습니다. 오늘은 "왜 공개키로 개인키를 알아낼 수 없는가" 를 수학으로 이해합니다.
- 일방향 함수: 한쪽 방향 계산은 쉽고, 거꾸로는 어려운 함수. 예) 두 소수 곱하기는 쉽지만, 곱을 다시 소인수분해하기는 어려움.
- 함정문(Trapdoor): 특별한 비밀 정보(개인키)를 아는 사람만 거꾸로 계산할 수 있는 "뒷문".
- 공개키 암호 = 일방향 함정문 함수(Trapdoor One-way Function) 위에 세운 집.
| 기반 수학 문제 | 쉬운 방향 | 어려운 방향 | 알고리즘 |
|---|---|---|---|
| 소인수분해 | p × q = n | n → p, q | RSA, Rabin |
| 이산대수(DLP) | gˣ mod p | gˣ mod p → x | 디피-헬먼, 엘가말, DSA, KCDSA, Schnorr |
| 타원곡선 이산대수(ECDLP) | k × P = Q (점 곱셈) | Q, P → k | ECC: ECDH, ECDSA, EC-KCDSA, EdDSA |
| 배낭(Knapsack) 문제 | 부분합 | 합 → 부분집합 | Merkle-Hellman (깨짐) |
| 오류 정정 부호 | – | – | McEliece (PQC 후보) |
| 격자(Lattice) | – | – | ML-KEM, ML-DSA (PQC, Day 6) |
4-2. 모듈러 연산 입문 (RSA 계산의 필수 도구)
① 합동: a ≡ b (mod n) ⇔ a와 b를 n으로 나눈 나머지가 같음. 예) 17 ≡ 2 (mod 5), −4 ≡ 19 (mod 23)
- 음수 활용 팁: 19 mod 23은 −4로 바꿔 계산하면 편함(19⁶ ≡ (−4)⁶ = 4096).
② 최대공약수(gcd)와 서로소: gcd(a, b) = 1이면 서로소. 유클리드 호제법으로 구함.
gcd(40, 3): 40 = 13 × 3 + 1
3 = 3 × 1 + 0 → gcd = 1 (서로소)
③ 오일러 피 함수 φ(n): 1 ~ n 중 n과 서로소인 수의 개수
- p가 소수 → φ(p) = p − 1 (예: φ(7) = 6)
- p, q가 서로 다른 소수 → φ(pq) = (p − 1)(q − 1) (예: φ(10) = 1×4 = 4 → {1, 3, 7, 9} ✔, φ(55) = 4 × 10 = 40)
④ 페르마 소정리 / 오일러 정리
- 페르마: p가 소수, gcd(a, p) = 1 → a^(p−1) ≡ 1 (mod p). 예) 3⁴ = 81 ≡ 1 (mod 5) ✔
- 오일러: gcd(a, n) = 1 → a^φ(n) ≡ 1 (mod n) ← RSA가 작동하는 이유
⑤ 모듈러 역원: a × x ≡ 1 (mod n)인 x = a⁻¹ mod n. gcd(a, n) = 1일 때만 존재. 확장 유클리드로 구함.
예1) 3⁻¹ mod 40
40 = 13×3 + 1 → 1 = 40 − 13×3
→ 3 × (−13) ≡ 1 (mod 40) → −13 + 40 = 27
검산: 3 × 27 = 81 = 2×40 + 1 ✔ ∴ 3⁻¹ ≡ 27 (mod 40)
예2) 7⁻¹ mod 60
60 = 8×7 + 4
7 = 1×4 + 3
4 = 1×3 + 1
거꾸로: 1 = 4 − 3 = 4 − (7 − 4) = 2×4 − 7
= 2×(60 − 8×7) − 7 = 2×60 − 17×7
→ 7 × (−17) ≡ 1 → −17 + 60 = 43
검산: 7 × 43 = 301 = 5×60 + 1 ✔ ∴ 7⁻¹ ≡ 43 (mod 60)
작은 수는 그냥 e × d를 1, n+1, 2n+1, 3n+1 … 중 하나가 되도록 찾아도 됩니다(3 × ? = 41? ✗, 81 ✔ → 27). 시험에서는 이 방법이 가장 빠릅니다.
⑥ 빠른 거듭제곱 (제곱-곱셈법): 지수를 2진수로 쪼개 제곱을 반복하며 매번 mod.
4-3. RSA (★)
1977년 Rivest, Shamir, Adleman. 암호화와 전자서명 둘 다 가능. 안전성 = 큰 수의 소인수분해 어려움.
flowchart TD
A["① 큰 소수 p, q 선택 (비밀)"] --> B["② n = p × q (공개)"]
B --> C["③ φ(n) = (p−1)(q−1) (비밀)"]
C --> D["④ e 선택: 1 #lt; e #lt; φ(n), gcd(e, φ(n)) = 1"]
D --> E["⑤ d = e⁻¹ mod φ(n) 즉 e·d ≡ 1 (mod φ(n))"]
E --> F["공개키 (e, n) / 개인키 (d, n) — p, q, φ(n)은 폐기 또는 비밀"]- 암호화: C = Mᵉ mod n (수신자 공개키) / 복호화: M = Cᵈ mod n (수신자 개인키)
- 서명: S = Mᵈ mod n (서명자 개인키) / 검증: M ≟ Sᵉ mod n (서명자 공개키). 실제로는 M 대신 H(M) 에 서명.
- 왜 되나: Cᵈ = M^(ed), ed = 1 + kφ(n) → M^(ed) = M × (M^φ(n))ᵏ ≡ M × 1ᵏ = M (오일러 정리)
✏️ RSA 손계산 예제: p = 5, q = 11, e = 3, 평문 M = 7
[키 생성]
- n = 5 × 11 = 55
- φ(n) = 4 × 10 = 40
- e = 3 → gcd(3, 40) = 1 ✔
- d = 3⁻¹ mod 40 = 27 (위 4-2 예1, 3 × 27 = 81 = 2×40 + 1)
- 공개키 (3, 55), 개인키 (27, 55)
[암호화] C = 7³ mod 55 = 343 mod 55 → 55 × 6 = 330, 343 − 330 = 13 → C = 13
[복호화] M = 13²⁷ mod 55 (27 = 16 + 8 + 2 + 1)
| 거듭제곱 | 계산 | mod 55 |
|---|---|---|
| 13¹ | 13 | 13 |
| 13² | 169 = 55×3 + 4 | 4 |
| 13⁴ | 4² = 16 | 16 |
| 13⁸ | 16² = 256 = 55×4 + 36 | 36 |
| 13¹⁶ | 36² = 1296 = 55×23 + 31 | 31 |
13²⁷ = 13¹⁶ × 13⁸ × 13² × 13¹ ≡ 31 × 36 × 4 × 13
- 31 × 36 = 1116 = 55×20 + 16 → 16
- 16 × 4 = 64 = 55 + 9 → 9
- 9 × 13 = 117 = 55×2 + 7 → 7 ✅ 원래 평문 복원!
[전자서명] 같은 키로 M = 7에 서명: S = 7²⁷ mod 55
- 7² = 49, 7⁴ = 49² = 2401 = 55×43 + 36 → 36, 7⁸ = 36² ≡ 31, 7¹⁶ = 31² = 961 = 55×17 + 26 → 26
- 7²⁷ ≡ 26 × 31 × 49 × 7: 26×31 = 806 ≡ 36(806−770), 36×49 = 1764 ≡ 4(1764−1760), 4×7 = 28 → S = 28
- 검증: 28³ mod 55 → 28² = 784 = 55×14 + 14 → 14, 14 × 28 = 392 = 55×7 + 7 → 7 = M ✅
더 작은 예(암산용): p=3, q=11 → n=33, φ=20, e=3, d=7(3×7=21≡1). M=4 → C = 4³ = 64 ≡ 31. 복호화 31⁷: 31 ≡ −2 → (−2)⁷ = −128 ≡ −128 + 132 = 4 ✅
RSA 안전성과 실무
- 키 길이: 현재 2048비트 이상(2030년 이후 3072 이상 권장). 1024비트는 사용 금지.
- e는 보통 65537 (2¹⁶ + 1) — 계산이 빠르고 안전.
- 교재식(Textbook) RSA는 결정적(같은 M → 같은 C)이고 변형 가능 → 실무에서는 패딩 필수: 암호화는 OAEP, 서명은 PSS (구식: PKCS#1 v1.5).
- 공격: 소인수분해, 작은 e + 작은 M(Mᵉ < n이면 그냥 e제곱근), 공통 모듈러스(같은 n을 여럿이 공유), 타이밍·전력 부채널, 선택 암호문 공격. 대응: 충분한 키, 패딩, 블라인딩, 상수 시간 구현.
- 속도: 대칭키보다 수백~수천 배 느림 → 데이터는 대칭키, 키 전달·서명만 RSA (하이브리드, 4-9).
4-4. Rabin 암호
- 암호화: C = M² mod n (n = pq, p ≡ q ≡ 3 mod 4 선택하면 복호화가 쉬움)
- 안전성이 소인수분해와 동등함이 증명됨 (RSA는 증명되지 않음).
- 단점: 복호화하면 후보가 4개 나옴 → 진짜 평문을 고를 표식(중복)을 넣어야 함.
예) n = 77 (7 × 11), M = 20
C = 20² = 400 = 77×5 + 15 → C = 15
15의 제곱근 mod 7 : 15 ≡ 1 → ±1
15의 제곱근 mod 11: 15 ≡ 4 → ±2
중국인의 나머지 정리로 조합 → {13, 20, 57, 64} (각각 제곱하면 모두 15 mod 77)
→ 4개 중 원래 M = 20을 골라야 함
4-5. 엘가말(ElGamal) 암호
1985년. 이산대수 문제 기반. 디피-헬먼을 암호화 방식으로 바꾼 것.
- 키: 소수 p, 생성원 g, 개인키 x, 공개키 y = gˣ mod p
- 암호화(매번 새 난수 k): c₁ = gᵏ mod p, c₂ = M · yᵏ mod p → 암호문 (c₁, c₂)
- 복호화: s = c₁ˣ mod p, M = c₂ · s⁻¹ mod p
✏️ 예제: p = 23, g = 5, 개인키 x = 6 → 공개키 y = 5⁶ mod 23 = 8 (Day 2 계산)
평문 M = 10, 난수 k = 3
- c₁ = 5³ = 125 = 23×5 + 10 → 10
- y³ = 8³ = 512 = 23×22 + 6 → 6, c₂ = 10 × 6 = 60 = 23×2 + 14 → 14
- 암호문 (10, 14)
복호화
- s = c₁ˣ = 10⁶ mod 23: 10² = 100 ≡ 8, 10⁴ ≡ 64 ≡ 18, 10⁶ ≡ 18 × 8 = 144 ≡ 6
- s⁻¹ mod 23: 6 × 4 = 24 ≡ 1 → 4
- M = 14 × 4 = 56 = 23×2 + 10 → 10 ✅
같은 평문, 다른 난수 k = 2로 다시 암호화하면?
- c₁ = 5² = 25 ≡ 2, y² = 64 ≡ 18, c₂ = 10 × 18 = 180 = 23×7 + 19 → 19 → 암호문 (2, 19)
- 복호화: s = 2⁶ = 64 ≡ 18, 18⁻¹ ≡ 9 (18×9 = 162 = 23×7 + 1), M = 19 × 9 = 171 = 23×7 + 10 → 10 ✅
엘가말의 특징 (★)
- 확률적(비결정적) 암호: 같은 평문도 k에 따라 매번 다른 암호문 → 평문 추측 공격에 강함.
- 암호문이 (c₁, c₂) 두 덩어리 → 암호문 길이가 평문의 약 2배(메시지 확장).
- 암호화와 전자서명 모두 가능(엘가말 서명 → DSA의 모태).
- 난수 k 재사용 금지: 같은 k를 쓰면 한 평문이 알려질 때 다른 평문도 노출.
- 곱셈에 대해 준동형(E(M1)×E(M2) = E(M1×M2)).
4-6. 타원곡선 암호(ECC)
1985년 코블리츠·밀러가 각각 제안. 유한체 위의 타원곡선 y² = x³ + ax + b 위의 점들로 연산.
- 점 덧셈: 곡선 위 두 점 P, Q를 지나는 직선이 곡선과 만나는 세 번째 점을 x축 대칭.
- 스칼라 곱: Q = k·P (P를 k번 더함) — 계산은 쉬움. Q와 P로부터 k를 구하기는 매우 어려움(ECDLP).
- 개인키 = k(정수), 공개키 = Q(점).
- 장점: 짧은 키로 같은 강도 → 연산 빠르고 메모리·대역폭·전력 절약 → 모바일, IoT, 스마트카드, 블록체인(비트코인 secp256k1).
- 응용: ECDH(키 교환), ECDSA(서명), EdDSA/Ed25519, EC-KCDSA(국산), TLS 1.3의 X25519.
4-7. 키 길이 대비 보안 강도 (NIST SP 800-57 기준)
| 보안 강도(비트) | 대칭키 | RSA·DH·DSA | ECC | 해시(충돌 저항) |
|---|---|---|---|---|
| 80 (사용 금지) | 2TDEA | 1024 | 160 | SHA-1 |
| 112 | 3TDEA | 2048 | 224 | SHA-224 |
| 128 | AES-128 | 3072 | 256 | SHA-256 |
| 192 | AES-192 | 7680 | 384 | SHA-384 |
| 256 | AES-256 | 15360 | 512 | SHA-512 |
외울 것: RSA 3072 ≈ ECC 256 ≈ AES-128. RSA는 강도를 2배로 올리려면 키가 훨씬 많이 늘어나지만 ECC는 키 길이가 강도의 약 2배로 선형적으로 늘어납니다. 해시는 생일 공격 때문에 출력의 절반이 강도.
4-8. 전자서명 알고리즘: DSA · KCDSA · ECDSA
| 알고리즘 | 기반 | 특징 |
|---|---|---|
| RSA 서명 | 소인수분해 | 암호화와 같은 수학, PSS 패딩 권장 |
| DSA | 이산대수 | 미국 DSS(FIPS 186) 표준. 서명 전용(암호화 불가). 엘가말·슈노어 서명 변형. 서명 = (r, s). FIPS 186-5(2023)에서 신규 서명 생성용으로는 제외 |
| KCDSA | 이산대수 | 국산 전자서명 표준(TTA). 서명자 공개키 정보를 해시에 포함 |
| EC-KCDSA | 타원곡선 | KCDSA의 타원곡선 버전 |
| ECDSA | 타원곡선 | DSA의 ECC 버전. 비트코인·TLS |
| EdDSA (Ed25519) | 타원곡선(에드워즈) | 결정적 난수 생성으로 k 재사용 실수 방지, 빠름 |
| Schnorr | 이산대수 | 간결, 다중서명 합치기 용이(비트코인 Taproot) |
- DSA/ECDSA는 서명할 때마다 비밀 난수 k가 필요. k를 재사용하면 개인키가 계산되어 노출됩니다(실제로 게임기 보안이 이렇게 뚫린 사례가 있음).
4-9. 하이브리드 암호 (전자봉투, Digital Envelope)
대칭키(빠름) + 공개키(키 분배 쉬움)의 장점을 결합.
sequenceDiagram
participant A as 송신자
participant B as 수신자
Note over A: ① 랜덤 세션키 K 생성
Note over A: ② 데이터를 K로 대칭 암호화 (AES)
Note over A: ③ K를 B의 공개키로 암호화 (RSA/ECIES)
A->>B: [AES_K(데이터)] + [RSA_PubB(K)] = 전자봉투
Note over B: ④ 개인키로 K 복원
Note over B: ⑤ K로 데이터 복호화- TLS, PGP, S/MIME 모두 이 구조. 전자서명까지 붙이면 기밀성 + 무결성 + 인증 + 부인방지.
| 비교 | 대칭키 | 공개키 |
|---|---|---|
| 키 관계 | 암·복호화 키 같음 | 공개키 ≠ 개인키 |
| 속도 | 빠름 | 느림 |
| 키 개수(n명) | n(n−1)/2 | 2n |
| 키 분배 | 어려움 | 쉬움 |
| 부인방지 | ✗ | ○ (전자서명) |
| 주 용도 | 대량 데이터 암호화 | 키 교환, 전자서명 |
⚠️ 시험 함정 (Day 4)
- RSA의 d는 mod φ(n) 에서의 역원이지 mod n이 아님. 계산 문제 단골 실수.
- 엘가말·DSA·KCDSA·DH = 이산대수, RSA·Rabin = 소인수분해. "엘가말은 소인수분해 기반" → ✗.
- DSA는 서명 전용(암호화 불가), 디피-헬먼은 키 교환 전용. RSA·엘가말은 암호화·서명 모두 가능.
- 엘가말 암호문은 평문의 2배, 확률적 암호. "같은 평문은 항상 같은 암호문" → ✗.
- Rabin은 복호화 결과가 4개, 안전성이 소인수분해와 동등함이 증명된 것은 Rabin(RSA 아님).
- ECC가 "더 긴 키로 같은 강도" → ✗ (짧은 키).
- 공개키 암호로 대용량 데이터를 직접 암호화하는 것이 일반적이라는 보기 → ✗ (하이브리드).
- 배낭 암호(Merkle-Hellman)는 이미 깨짐.
📌 기출 포인트 (Day 4)
- 작은 p, q, e를 주고 n, φ(n), d를 구하거나, 암호문/평문을 계산하는 문제.
- 공개키 알고리즘과 수학적 기반 문제 연결.
- 엘가말의 특징(확률적, 2배 길이), ECC의 장점(짧은 키·모바일), RSA 패딩(OAEP/PSS) 묻기.
- 국산 전자서명(KCDSA, EC-KCDSA)과 미국 DSS 구분.
- 하이브리드(전자봉투) 구조에서 "세션키를 무엇으로 암호화하나"(수신자 공개키) 묻기.
📝 확인 문제 (Day 4)
Q1. RSA에서 p = 7, q = 13, e = 5일 때 개인키 d는?
① 29 ② 31 ③ 43 ④ 65
정답: ①
- n = 91, φ(n) = 6 × 12 = 72. 5 × d ≡ 1 (mod 72)
- 1, 73, 145 … 중 5의 배수: 145 = 5 × 29 → d = 29 (145 = 2×72 + 1 ✔)
- ② 틀림: 5×31 = 155 = 2×72 + 11. ③ 틀림: 5×43 = 215 = 2×72 + 71. ④ 틀림: 5×65 = 325 = 4×72 + 37. (참고: mod n=91로 잘못 계산하는 실수를 노린 보기들)
Q2. RSA 공개키 (e, n) = (3, 33)으로 평문 M = 5를 암호화한 암호문은?
① 2 ② 8 ③ 15 ④ 26
정답: ④
- C = 5³ mod 33 = 125 mod 33 = 125 − 99 = 26
- 검산: d = 7, 26⁷ mod 33 → 26 ≡ −7, (−7)² = 49 ≡ 16, (−7)⁴ ≡ 16² = 256 ≡ 25, (−7)⁶ ≡ 25×16 = 400 ≡ 4, (−7)⁷ ≡ 4 × (−7) = −28 ≡ 5 ✔
- ① ② ③은 계산 실수(5×3=15 등)를 노린 보기.
Q3. 엘가말(ElGamal) 암호에 대한 설명으로 옳지 않은 것은?
① 이산대수 문제의 어려움에 기반한다
② 암호화할 때마다 난수를 사용하므로 같은 평문도 다른 암호문이 된다
③ 암호문의 길이가 평문의 약 2배가 된다
④ 서명 기능은 없고 암호화 기능만 제공한다
정답: ④
- ①②③ 맞음.
- ④ 틀림(정답): 엘가말은 전자서명도 가능하며, 엘가말 서명은 DSA의 기반이다.
Q4. 공개키 알고리즘과 기반 수학 문제의 연결로 옳지 않은 것은?
① Rabin – 소인수분해 ② DSA – 이산대수 ③ KCDSA – 소인수분해 ④ ECDSA – 타원곡선 이산대수
정답: ③
- ③ 틀림(정답): KCDSA는 이산대수 기반 국산 서명.
- 나머지는 올바른 연결.
Q5. ECC에 대한 설명으로 옳은 것은?
① RSA와 동일한 보안 강도를 얻으려면 더 긴 키가 필요하다
② 256비트 ECC는 약 3072비트 RSA와 비슷한 보안 강도를 갖는다
③ 소인수분해 문제에 기반한다
④ 양자컴퓨터의 쇼어 알고리즘에 대해 안전하다
정답: ②
- ① 틀림: 더 짧은 키로 같은 강도.
- ② 맞음: AES-128 수준 강도.
- ③ 틀림: 타원곡선 이산대수 문제.
- ④ 틀림: 쇼어 알고리즘은 ECDLP도 다항식 시간에 풂 → PQC 필요.
Q6. 하이브리드 암호 방식(전자봉투)에 대한 설명으로 옳은 것은?
① 데이터는 공개키로, 세션키는 대칭키로 암호화한다
② 세션키는 송신자의 개인키로 암호화해 전송한다
③ 데이터는 대칭키로 암호화하고, 그 대칭키는 수신자의 공개키로 암호화한다
④ 대칭키 암호의 키 분배 문제를 해결하지 못한다
정답: ③
- ① 틀림: 반대로 설명.
- ② 틀림: 송신자 개인키로 암호화하면 누구나(송신자 공개키로) 풀 수 있어 기밀성이 없음. 그것은 서명의 방식.
- ③ 맞음.
- ④ 틀림: 공개키로 세션키를 전달하므로 키 분배 문제를 해결하는 것이 목적.
Day 5 · 해시 · MAC · 전자서명 · PKI 심화
5-1. 해시 함수의 안전성 3가지 (복습 + 심화)
해시 함수는 임의 길이 입력 → 고정 길이 출력(다이제스트), 계산은 빠르고 되돌릴 수 없음. 기본 성질은 Week03_보안 개념과 암호 기초 참고. 여기서는 어떤 공격에 몇 번 시도가 필요한지까지 봅니다.
| 성질 | 의미 | 공격자가 하려는 것 | n비트 해시의 공격 비용 |
|---|---|---|---|
| 역상 저항성 (일방향성) | h가 주어질 때 H(x) = h인 x를 못 찾음 | 해시 → 원문 | 2ⁿ |
| 제2 역상 저항성 (약한 충돌 저항) | x가 주어질 때 H(x) = H(x′)인 다른 x′를 못 찾음 | 특정 문서와 같은 해시의 위조 문서 | 2ⁿ |
| 충돌 저항성 (강한 충돌 저항) | H(x) = H(x′)인 아무 쌍도 못 찾음 | 아무 두 문서나 해시 같게 | 2^(n/2) (생일 공격) |
- 외우는 법: "주어진 것이 있으면 약한, 아무거나면 강한". 아무 쌍이나 찾는 게 공격자에게 더 쉬우므로, 그것까지 막는 성질이 "강한" 충돌 저항성.
- 충돌 저항성이 있으면 제2 역상 저항성도 있음(반대는 성립 안 함).
5-2. 해시의 내부 구조
① 머클-담고르(Merkle–Damgård) 구조 — MD5, SHA-1, SHA-2
M1 M2 M3(+패딩+길이)
│ │ │
IV ──► [ f ] ──H1─► [ f ] ──H2─► [ f ] ──► 해시값
압축함수 압축함수 압축함수
- 메시지를 블록(512 또는 1024비트)으로 자르고, 압축 함수 f에 이전 결과(체인값)와 다음 블록을 넣어 반복.
- 마지막 블록에 패딩 + 원래 메시지 길이를 넣음(MD 강화).
- 압축 함수가 충돌 저항이면 전체도 충돌 저항(증명).
- 약점: 길이 확장 공격(Length Extension) — H(K‖M)을 알면 K를 몰라도 H(K‖M‖패딩‖X)를 계산 가능 → 그래서 "비밀키를 앞에 붙여 해시"하는 단순 MAC은 위험 → HMAC을 써야 함.
② 스펀지(Sponge) 구조 — SHA-3(Keccak), Ascon-Hash
상태 1600비트 = [ rate r | capacity c ]
흡수(Absorbing) 짜내기(Squeezing)
M1 ─►⊕ M2 ─►⊕ ┌─► Z1 ─► Z2 …
▼ ▼ │
[r|c]→[ f ]→[r|c]→[ f ]→[r|c]→ … →[ f ]→ [r|c] ─┘─[ f ]─► …
- 메시지를 rate 부분에 XOR하며 순열 f(Keccak-f[1600])로 섞는 흡수 단계 → 원하는 길이만큼 rate 부분을 꺼내는 짜내기 단계.
- capacity c는 외부에 노출되지 않아 안전성을 결정(보안 강도 ≈ c/2).
- 출력 길이 가변(SHAKE128/256 = XOF), 길이 확장 공격에 안전.
5-3. 주요 해시 알고리즘
| 알고리즘 | 출력 | 블록 | 라운드/단계 | 구조 | 상태 |
|---|---|---|---|---|---|
| MD4 | 128 | 512 | 48 | MD | 깨짐 |
| MD5 | 128 | 512 | 64 (4라운드×16) | MD | 충돌 실증(2004), 사용 금지 |
| SHA-1 | 160 | 512 | 80 | MD | 실제 충돌(2017 SHAttered), 사용 금지 |
| SHA-224/256 | 224/256 | 512 | 64 | MD | 권장(SHA-2) |
| SHA-384/512 | 384/512 | 1024 | 80 | MD | 권장(SHA-2) |
| SHA-3 (Keccak) | 224/256/384/512 | rate 가변 | 24 | 스펀지 | 2015 FIPS 202 |
| SHAKE128/256 | 가변 | – | 24 | 스펀지 | XOF |
| RIPEMD-160 | 160 | 512 | – | MD(2중 병렬) | 비트코인 주소 |
| HAS-160 | 160 | 512 | 80 | MD | 국산(구), KCDSA용 |
| LSH | LSH-256: 224/256, LSH-512: 224~512 | 1024/2048 | 26/28 | 와이드 파이프 MD | 국산(KISA·NSR, 2014, KS X 3262) |
- SHA-3가 나온 이유: SHA-2가 깨져서가 아니라, MD 구조와 다른 설계의 예비 표준을 확보하려고(공모전 2007~2012, Keccak 선정).
- 국산 해시: LSH, HAS-160. 국산 블록 암호 이름(LEA, HIGHT)과 혼동 주의.
5-4. 생일 역설과 생일 공격 (★)
생일 역설: 방에 23명만 있어도 생일이 같은 사람이 있을 확률이 50%를 넘습니다. 직관(365의 절반 ≈ 183명)보다 훨씬 적은 이유는 "특정 날짜와 같은 사람"이 아니라 "아무 두 사람끼리 같은 쌍"을 찾기 때문입니다(23명이면 쌍이 23×22/2 = 253개).
✏️ 계산
- 23명 모두 생일이 다를 확률 = (365/365) × (364/365) × … × (343/365) ≈ 0.493 → 같은 쌍이 있을 확률 ≈ 1 − 0.493 = 0.507
- 일반화: N가지 값 중 무작위로 뽑을 때 충돌 확률 50%에 필요한 개수 ≈ 1.17√N
- 생일: 1.17 × √365 ≈ 1.17 × 19.1 ≈ 22.4 → 23명
- n비트 해시 → N = 2ⁿ → 필요 시도 ≈ √(2ⁿ) = 2^(n/2)
| 해시 | 출력 | 충돌 공격(생일) | 역상 공격 |
|---|---|---|---|
| (예시) 32비트 체크섬 | 32 | 2¹⁶ ≈ 65,536 (1.17배 하면 약 77,000번) | 2³² |
| MD5 | 128 | 2⁶⁴ | 2¹²⁸ |
| SHA-1 | 160 | 2⁸⁰ | 2¹⁶⁰ |
| SHA-256 | 256 | 2¹²⁸ | 2²⁵⁶ |
| SHA-512 | 512 | 2²⁵⁶ | 2⁵¹² |
- 결론: 128비트 보안이 필요하면 해시는 256비트 출력이 필요. 그래서 해시 출력은 대칭키 길이의 2배를 잡습니다.
- 생일 공격 시나리오(서명 위조): 공격자가 "정상 계약서" 변형 2^(n/2)개와 "사기 계약서" 변형 2^(n/2)개를 만들어 해시가 같은 쌍을 찾고 → 피해자에게 정상본에 서명받은 뒤 → 사기본에 그 서명을 붙임.
5-5. MAC과 HMAC
MAC(Message Authentication Code) = 공유 비밀키 K를 넣어 만든 체크섬. 키가 없으면 올바른 MAC을 만들 수 없으므로 무결성 + 메시지 출처 인증을 제공. 단, 양쪽이 같은 키를 가지므로 부인방지는 불가.
| 비교 | 해시 | MAC | 전자서명 |
|---|---|---|---|
| 키 | 없음 | 대칭(공유) 비밀키 | 개인키/공개키 |
| 무결성 | ○ (단, 공격자가 해시도 다시 계산 가능) | ○ | ○ |
| 출처 인증 | ✗ | ○ | ○ |
| 부인방지 | ✗ | ✗ | ○ |
| 속도 | 가장 빠름 | 빠름 | 느림 |
MAC 종류
- CBC-MAC: 메시지를 CBC 모드로 암호화한 마지막 블록을 MAC으로. 가변 길이 메시지에 취약 → 개선판 CMAC(NIST SP 800-38B).
- HMAC: 해시 함수 + 비밀키. RFC 2104, FIPS 198.
- GMAC(GCM의 인증 부분), Poly1305(ChaCha20과 함께).
HMAC 구조
HMAC(K, M) = H( (K′ ⊕ opad) ‖ H( (K′ ⊕ ipad) ‖ M ) )
K′ = 키를 해시 블록 크기에 맞춘 것 (길면 해시, 짧으면 0으로 채움)
ipad = 0x36 반복 (inner padding)
opad = 0x5C 반복 (outer padding)
K′⊕ipad ‖ M ──► [H] ──► 내부 해시
│
K′⊕opad ‖ 내부 해시 ──► [H] ──► HMAC 값
- 해시를 두 번 감싸므로 MD 구조의 길이 확장 공격에 안전.
- 어떤 해시든 끼워 쓸 수 있음: HMAC-SHA256 등. 기반 해시가 약간 약해도(MD5의 충돌) HMAC 자체는 상대적으로 덜 영향받음 — 그래도 신규 사용은 SHA-2 이상.
암호화와 MAC의 결합 순서
| 방식 | 방법 | 평가 |
|---|---|---|
| Encrypt-then-MAC | 암호화 후 암호문에 MAC | 가장 안전(IPsec ESP), 위조 암호문을 복호화 전에 거부 |
| MAC-then-Encrypt | MAC 후 (평문+MAC) 암호화 | 구 TLS, 패딩 오라클 위험 |
| Encrypt-and-MAC | 평문 MAC + 암호화 따로 | SSH, MAC이 평문 정보 노출 가능 |
5-6. 패스워드 안전 저장
| 단계 | 저장 방식 | 문제 |
|---|---|---|
| 0 | 평문 저장 | DB 유출 = 즉시 노출 |
| 1 | 해시만 저장 H(pw) | 레인보우 테이블(미리 계산한 해시 사전)로 역추적, 같은 비번 = 같은 해시 |
| 2 | 솔트(Salt) + 해시 H(salt‖pw) | 사용자마다 랜덤 솔트 → 레인보우 테이블 무력화, 같은 비번도 다른 해시. 하지만 GPU로 빠르게 대입 가능 |
| 3 | 키 스트레칭 (해시를 수천~수십만 번 반복) | 한 번 검증이 느려짐 → 대입 공격 비용 폭증 |
| 4 | 메모리 하드 함수 | GPU/ASIC 병렬 공격까지 어렵게 |
✏️ 솔트의 효과
솔트 없음: Alice "1234" → H("1234") = 03ac67…
Bob "1234" → H("1234") = 03ac67… ← 같음! 한 명 뚫리면 둘 다
솔트 사용: Alice salt=Xf9 → H("Xf9"‖"1234") = 8d1e…
Bob salt=k2Q → H("k2Q"‖"1234") = 51b7… ← 다름
- 솔트는 비밀이 아님(해시와 함께 DB에 저장). 목적은 사전 계산 공격 방지와 사용자 간 구분.
- 페퍼(Pepper): 모든 사용자 공통의 비밀 값, DB가 아닌 별도 장소(HSM, 설정)에 보관.
| 알고리즘 | 특징 |
|---|---|
| PBKDF2 | PKCS#5, HMAC을 반복 횟수(iteration) 만큼 반복. 표준·FIPS 인정, 단 메모리 사용 적어 GPU 공격에 약함 |
| bcrypt | Blowfish 기반, cost(작업 인자) 로 반복 2^cost. 솔트 내장 |
| scrypt | 메모리 하드(대용량 메모리 필요) → GPU·ASIC 공격 억제 |
| Argon2 | 2015 패스워드 해싱 대회(PHC) 우승. 메모리·시간·병렬도 조절. Argon2id 권장 |
5-7. 전자서명 심화
서명 생성·검증 흐름(복습): 문서 → 해시 → 서명자 개인키로 서명 → (문서 + 서명) 전송 → 수신자는 서명자 공개키로 검증하고 직접 계산한 해시와 비교.
전자서명의 5대 요건 (★)
| 요건 | 의미 |
|---|---|
| 위조 불가 (Unforgeable) | 개인키 소유자만 서명 생성 가능 |
| 서명자 인증 (User Authentication) | 누구의 서명인지 공개키로 확인 가능 |
| 부인 방지 (Non-repudiation) | 서명자가 나중에 서명 사실을 부인 못 함 |
| 변경 불가 (Unalterable) | 서명된 문서 내용을 바꾸면 검증 실패 |
| 재사용 불가 (Not Reusable) | 한 문서의 서명을 다른 문서에 옮겨 쓸 수 없음 |
- 전자서명이 기본적으로 제공하지 않는 것 = 기밀성(문서를 암호화하지 않음). 기밀성이 필요하면 별도 암호화(전자봉투).
- 방식: 부가형(with Appendix) — 메시지와 서명을 따로 전송(대부분, 해시 사용) / 메시지 복원형(Message Recovery) — 서명 안에 메시지가 들어 있어 검증하면 메시지 복원(짧은 메시지용).
특수 전자서명
| 서명 | 핵심 | 용도 |
|---|---|---|
| 은닉(Blind) 서명 | 서명자가 내용을 모른 채 서명 (차움, 1982) | 전자화폐·전자투표 (익명성·추적 불가) |
| 이중(Dual) 서명 | 두 정보를 연결하되 각 수신자는 자기 몫만 봄 | SET 전자결제 |
| 대리(위임, Proxy) 서명 | 원 서명자가 권한을 위임해 대리인이 서명 | 출장 중 결재 위임 |
| 그룹 서명 | 그룹 구성원 누구나 그룹 이름으로 서명, 필요시 관리자만 서명자 확인 | 익명 조직 인증 |
| 다중(Multi) 서명 | 여러 명이 한 문서에 서명 | 공동 결재, 암호화폐 지갑 |
| 부인 방지(Undeniable) 서명 | 검증에 서명자의 협조(대화) 가 필요 | 소프트웨어 배포 통제 |
| 수신자 지정 서명 | 지정된 수신자만 검증 가능 | 기밀 결재 |
✏️ 은닉 서명 (RSA 기반) 예제 — 서명자 키 n = 55, e = 3, d = 27 (Day 4와 동일)
사용자는 메시지 m = 7에 서명을 받고 싶지만 서명자에게 7을 보여주기 싫습니다.
sequenceDiagram
participant U as 사용자 (m = 7)
participant S as 서명자 (d = 27)
Note over U: ① 은닉 인자 r = 2 선택 (gcd(2,55) = 1)
Note over U: m′ = m · r^e = 7 · 2³ = 56 ≡ 1 (mod 55)
U->>S: m′ = 1 (원래 7인지 알 수 없음)
Note over S: ② s′ = (m′)^d = 1^27 = 1
S->>U: s′ = 1
Note over U: ③ r⁻¹ mod 55 = 28 (2 × 28 = 56 ≡ 1)
Note over U: s = s′ · r⁻¹ = 1 × 28 = 28- 결과 s = 28은 Day 4에서 직접 계산한 7의 RSA 서명 7²⁷ mod 55 = 28과 정확히 같습니다 ✅
- 원리: s′ = (m · rᵉ)ᵈ = mᵈ · r^(ed) = mᵈ · r → r⁻¹을 곱하면 mᵈ만 남음.
- 서명자는 m′ = 1만 봤으므로 나중에 s = 28이 쓰여도 어느 사용자에게 해준 서명인지 연결할 수 없음 → 전자화폐 익명성.
이중 서명 (SET) 구성
SET(Secure Electronic Transaction, 1996 비자·마스터카드)에서 고객은 주문정보(OI) 는 상점에, 지불정보(PI, 카드번호) 는 은행(지불 게이트웨이)에 보내야 합니다. 그런데 "이 주문과 이 지불은 한 거래다"라는 연결은 증명해야 합니다.
flowchart TD
PI["지불정보 PI"] --> H1["H(PI) = PIMD"]
OI["주문정보 OI"] --> H2["H(OI) = OIMD"]
H1 --> C["PIMD ‖ OIMD"]
H2 --> C
C --> H3["H(PIMD ‖ OIMD) = POMD"]
H3 --> DS["이중서명 DS = 고객 개인키로 POMD 서명"]- 상점이 받는 것: OI + PIMD + DS → OI로 OIMD를 계산, PIMD와 이어 해시 → DS 검증. 카드번호(PI)는 못 봄.
- 은행이 받는 것: PI + OIMD + DS → 같은 방식으로 검증. 무엇을 샀는지(OI)는 못 봄.
- SET 구성: 카드 소지자, 상점, 지불 게이트웨이, 인증기관(CA). 너무 복잡해 실패했지만 이중 서명 개념은 단골 출제.
5-8. X.509 인증서 (v3)
인증서 = "이 공개키는 이 주체의 것"이라고 CA가 전자서명한 전자 문서. 국제 표준 ITU-T X.509 (인터넷 프로파일 RFC 5280).
| 버전 | 추가된 것 |
|---|---|
| v1 (1988) | 기본 필드 |
| v2 (1993) | 발급자·주체 고유 식별자(Unique ID) |
| v3 (1996) | 확장(Extensions) 필드 |
기본 필드
| 필드 | 내용 |
|---|---|
| 버전 (Version) | v3 |
| 일련번호 (Serial Number) | CA 내에서 유일. 폐지 시 CRL에 기재되는 값 |
| 서명 알고리즘 (Signature Algorithm ID) | 예: sha256WithRSAEncryption |
| 발급자 (Issuer) | 발급한 CA의 DN |
| 유효기간 (Validity) | notBefore ~ notAfter |
| 주체 (Subject) | 소유자 DN (CN=www.example.com 등) |
| 주체 공개키 정보 (Subject Public Key Info) | 알고리즘 + 공개키 |
| 발급자/주체 고유 ID | v2 추가, 거의 안 씀 |
| 확장 (Extensions) | v3 추가 |
| CA의 전자서명 | 위 내용 전체에 대한 CA 서명 |
- 인증서에 개인키는 절대 들어가지 않습니다(시험 단골 오답).
주요 v3 확장 필드 (각 확장은 중요(critical) 표시 가능: critical인데 이해 못 하면 인증서 거부)
| 확장 | 의미 |
|---|---|
| 기본 제약 (Basic Constraints) | CA인지 여부(cA=TRUE/FALSE), 하위 경로 길이 제한(pathLen) |
| 키 용도 (Key Usage) | digitalSignature, keyEncipherment, keyCertSign, cRLSign 등 |
| 확장 키 용도 (Extended Key Usage) | serverAuth, clientAuth, codeSigning, emailProtection 등 |
| 주체 대체 이름 (SAN) | 도메인 여러 개, 이메일, IP (현재 브라우저는 CN 대신 SAN을 확인) |
| 기관 키 식별자 (AKI) / 주체 키 식별자 (SKI) | 체인 구성 시 상위 인증서 찾기 |
| 인증서 정책 (Certificate Policies) | 발급 정책 OID |
| 정책 매핑 / 정책 제약 / 이름 제약 | 상호 인증 시 정책·이름 공간 제한 |
| CRL 배포 지점 (CRL DP) | CRL을 받을 URL |
| 기관 정보 접근 (AIA) | OCSP 응답자 URL, 상위 CA 인증서 URL |
5-9. PKI 구성과 신뢰 모델
PKI(공개키 기반구조) = 인증서를 발급·관리·폐지하는 사람, 정책, 시스템 전체.
| 구성요소 | 역할 |
|---|---|
| CA (인증기관) | 인증서 발급·서명, 폐지, CRL 발행 |
| RA (등록기관) | 사용자 신원 확인, 등록 대행 (인증서 서명은 안 함) |
| VA (검증기관) | 인증서 유효성 검증 서비스 (OCSP 응답자 등) |
| 디렉터리/저장소 | 인증서·CRL 공개 저장 (주로 LDAP) |
| 사용자(End Entity) | 인증서 소유자, 신뢰 당사자(Relying Party) |
인증서 생명주기: 키 쌍 생성 → 신청 → RA 신원 확인 → CA 발급 → 배포/사용 → 검증 → (갱신) → 폐지·효력정지 또는 만료 → 보관.
인증 경로(신뢰 체인) 검증
flowchart TD
R["루트 CA 인증서
(자체 서명, 브라우저/OS에 미리 내장 = 신뢰 앵커)"] -->|서명| I["중간 CA 인증서
Issuer = 루트 / BasicConstraints cA=TRUE"]
I -->|서명| L["서버(최종 개체) 인증서
Issuer = 중간 CA / SAN = www.example.com"]검증 순서: 서버 인증서의 서명을 중간 CA 공개키로 확인 → 중간 CA 인증서를 루트 공개키로 확인 → 루트는 신뢰 저장소에 있으므로 신뢰. 각 단계마다 유효기간, 폐지 여부, 용도·제약, 도메인 이름을 함께 확인.
PKI 신뢰 모델
| 모델 | 구조 | 특징 |
|---|---|---|
| 계층(Hierarchical) | 단일 루트 아래 트리 | 경로 단순, 루트 탈취 시 전체 붕괴. 국내 전자서명 체계(KISA 최상위 인증기관) |
| 망형/메시(Mesh, Network) | CA끼리 상호 인증(Cross-certification) | 유연·장애에 강함, 경로 탐색 복잡 |
| 브리지 CA (Hub & Spoke) | 중앙 브리지 CA가 각 PKI와 상호 인증 | 상호 인증 수 n(n−1)/2 → n으로 감소 (미 연방 Bridge CA) |
| 웹(브라우저) 모델 | 브라우저에 다수 루트 CA 미리 내장 | 현재 인터넷. 하나라도 부실 CA면 위험 |
| 사용자 중심 (Web of Trust) | 사용자끼리 서로의 키에 서명 | PGP. 중앙 CA 없음 |
5-10. 인증서 폐지: CRL vs OCSP (★)
개인키 유출·소속 변경 등으로 유효기간 전에 인증서를 무효화하는 것이 폐지(Revocation).
CRL (Certificate Revocation List): CA가 폐지된 인증서의 일련번호 목록에 서명해 주기적으로 게시.
- 주요 필드: 발급자, 이번 갱신(thisUpdate), 다음 갱신(nextUpdate), 폐지 목록(일련번호 + 폐지 일자 + 사유 코드), CRL 번호, CA 서명
- 폐지 사유 예: 키 손상(keyCompromise), CA 키 손상, 소속 변경, 대체됨(superseded), 운영 중지, 인증서 보류(certificateHold = 효력정지, 해제 가능)
- 문제: 실시간성 부족(다음 갱신 전까지 모름), 목록이 커짐 → 대응: Delta CRL(변경분만), CRL DP(목록을 분할 배포)
OCSP (Online Certificate Status Protocol, RFC 6960): 클라이언트가 OCSP 응답자에게 특정 인증서 하나의 상태를 실시간 질의.
- 응답: good / revoked / unknown (응답자가 서명)
- 문제: 응답자 부하·가용성, 사용자가 어떤 사이트에 접속하는지 OCSP 서버가 알게 됨(프라이버시).
OCSP 스테이플링 (TLS Certificate Status Request 확장): 웹 서버가 미리 OCSP 응답(CA 서명됨)을 받아 두었다가 TLS 핸드셰이크 때 인증서와 함께 "스테이플러로 찍어" 전달.
sequenceDiagram
participant S as 웹 서버
participant O as OCSP 응답자
participant C as 브라우저
S->>O: 주기적으로 내 인증서 상태 질의
O->>S: 서명된 OCSP 응답 (good, 유효시간 포함)
C->>S: TLS ClientHello (status_request)
S->>C: 인증서 + 스테이플된 OCSP 응답
Note over C: CA 서명 확인 → OCSP 서버에 직접 묻지 않음| 비교 | CRL | OCSP | OCSP 스테이플링 |
|---|---|---|---|
| 방식 | 목록 다운로드 | 건별 실시간 질의 | 서버가 응답을 첨부 |
| 실시간성 | 낮음(주기적) | 높음 | 높음(응답 캐시 수명 내) |
| 클라이언트 부담 | 큰 목록 다운·검색 | 작음 | 가장 작음 |
| 프라이버시 | 좋음 | 나쁨(질의 노출) | 좋음 |
| 응답자 부하 | 낮음 | 높음 | 낮음 |
5-11. 국내 전자서명 제도 변화
- 전자서명법 전부개정(2020년 12월 10일 시행): 공인인증서 제도 폐지 → 공인/사설 구분 없이 다양한 전자서명(클라우드·생체·간편인증) 사용 가능. 기존 공인인증서는 "공동인증서" 로 이름이 바뀌어 계속 사용.
- 전자서명인증사업자는 평가·인정 제도로 신뢰성 확인. 최상위 인증기관 역할은 KISA.
⚠️ 시험 함정 (Day 5)
- "주어진 x에 대해" = 제2 역상(약한 충돌), "아무 쌍" = 충돌(강한 충돌). 이름을 바꿔 낸 보기 주의.
- 생일 공격 횟수는 2^(n/2). "2^(n−1)", "n/2"는 오답.
- MAC은 부인방지 불가(대칭키 공유). 부인방지는 전자서명만.
- HMAC의 ipad = 0x36, opad = 0x5C.
- 솔트는 비밀이 아님. 목적은 레인보우 테이블 방지. 키 스트레칭은 무차별 대입 지연.
- 전자서명 5요건에 기밀성은 없음.
- 은닉 서명 = 전자화폐·전자투표(익명성), 이중 서명 = SET. 짝 바꾸기 주의.
- 인증서에는 공개키가 들어가며 개인키는 없음. 확장 필드는 v3에서 추가(v2는 고유 ID).
- CRL은 일련번호로 폐지 인증서 식별. OCSP 응답 3가지 = good / revoked / unknown.
- RA는 신원 확인만, 인증서 서명·발급은 CA.
📌 기출 포인트 (Day 5)
- 해시 안전성 3가지의 정의 구분, 생일 공격 계산(n비트 → 2^(n/2)).
- MD5/SHA-1/SHA-2/SHA-3의 출력 길이·구조, 국산 해시(LSH, HAS-160).
- MAC과 전자서명의 차이(부인방지), HMAC 구조.
- 전자서명 요건, 특수 서명 종류와 활용 분야(특히 은닉·이중 서명의 원리).
- X.509 v3 필드에 포함되지 않는 것 고르기(개인키, 사용자 패스워드 등).
- CRL과 OCSP 비교, OCSP 응답 종류, PKI 구성요소(CA/RA/디렉터리) 역할.
- 패스워드 저장 시 솔트·키 스트레칭 목적, bcrypt/scrypt/PBKDF2/Argon2 구분.
📝 확인 문제 (Day 5)
Q1. 해시 함수에서 "주어진 입력 x에 대해 H(x) = H(y)를 만족하는 다른 입력 y를 찾는 것이 계산적으로 어려운 성질"은?
① 역상 저항성 ② 제2 역상 저항성 ③ 강한 충돌 저항성 ④ 일방향성
정답: ②
- ① 틀림: 해시값 h로부터 입력을 찾는 문제(④와 같은 의미).
- ② 맞음: x가 주어진 상태 → 제2 역상(약한 충돌) 저항성.
- ③ 틀림: 아무 쌍이나 찾는 것을 막는 성질.
- ④ 틀림: 역상 저항성과 같은 의미.
Q2. 출력 길이가 160비트인 해시 함수에 대해 생일 공격으로 충돌을 찾는 데 필요한 대략적인 연산 횟수는?
① 2⁸⁰ ② 2¹⁵⁹ ③ 2¹⁶⁰ ④ 2⁴⁰
정답: ①
- 생일 공격 = 2^(n/2) = 2^(160/2) = 2⁸⁰
- ② 틀림: 전수 역상 공격의 평균값(2ⁿ⁻¹).
- ③ 틀림: 역상 공격 상한(2ⁿ).
- ④ 틀림: n/4로 잘못 계산.
Q3. HMAC에 대한 설명으로 옳지 않은 것은?
① 비밀키와 해시 함수를 결합해 메시지 인증 코드를 생성한다
② ipad와 opad라는 두 패딩 상수를 사용한다
③ 송신자의 개인키로 생성하므로 부인방지 기능을 제공한다
④ 해시를 이중으로 적용하여 길이 확장 공격에 강하다
정답: ③
- ③ 틀림(정답): HMAC은 공유 대칭키를 사용하므로 수신자도 같은 MAC을 만들 수 있어 부인방지 불가.
- ①②④는 올바른 설명.
Q4. SET에서 사용하는 이중 서명에 대한 설명으로 옳은 것은?
① 상점은 고객의 지불정보(카드번호)를 직접 확인할 수 있다
② 주문정보 해시와 지불정보 해시를 연결해 다시 해시한 값에 고객이 서명한다
③ 서명자가 메시지 내용을 모른 채 서명하는 방식이다
④ 여러 사람이 하나의 문서에 순차적으로 서명하는 방식이다
정답: ②
- ① 틀림: 상점은 PI 대신 PIMD(해시)만 받으므로 카드번호를 볼 수 없음.
- ② 맞음: DS = Sign(H(H(PI) ‖ H(OI))).
- ③ 틀림: 은닉 서명.
- ④ 틀림: 다중 서명.
Q5. X.509 v3 인증서에 포함되지 않는 것은?
① 발급자 이름 ② 주체의 공개키 ③ 주체의 개인키 ④ 기본 제약(Basic Constraints) 확장
정답: ③
- ③ 틀림(정답): 개인키는 소유자만 안전하게 보관하며 인증서에 절대 포함되지 않음.
- ① 기본 필드 Issuer, ② Subject Public Key Info, ④ v3 확장 필드로 모두 포함 가능.
Q6. 인증서 상태 확인 방식에 대한 설명으로 옳지 않은 것은?
① CRL은 CA가 폐지된 인증서의 일련번호 목록을 주기적으로 서명해 게시한다
② OCSP는 특정 인증서의 상태를 실시간으로 질의하며 good, revoked, unknown으로 응답한다
③ OCSP 스테이플링은 웹 서버가 받아둔 OCSP 응답을 TLS 핸드셰이크 시 함께 전달한다
④ OCSP는 CRL보다 실시간성이 낮지만 클라이언트의 프라이버시 보호에 유리하다
정답: ④
- ④ 틀림(정답): OCSP는 CRL보다 실시간성이 높고, 클라이언트가 응답자에게 직접 묻기 때문에 프라이버시 측면에서는 불리(그래서 스테이플링 등장).
- ①②③은 올바른 설명.
Day 6 · 2027 신규 범위 (블록체인 · PQC · 동형암호 · 경량암호 · 딥페이크)
2027~2029 출제기준에서 새로 명시된 범위입니다. 복원 기출로 연습할 수 없으므로 정의·대표 알고리즘·장단점 위주로 개념을 정확히 잡아 두세요. 처음 출제될 때는 대개 "옳은/옳지 않은 설명 고르기" 형태로 나옵니다.
6-1. 블록체인
블록체인 = 거래 기록을 블록에 담고, 각 블록이 이전 블록의 해시값을 품어 사슬처럼 연결한 분산 원장. 중앙 관리자 없이 참여자(노드)들이 같은 장부 사본을 나눠 가지고 합의 알고리즘으로 다음 블록을 결정합니다.
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
│ 블록 #100 │ │ 블록 #101 │ │ 블록 #102 │
│ 이전 해시: 7a3f… │◄──│ 이전 해시: H(#100) │◄──│ 이전 해시: H(#101) │
│ 머클 루트: c91e… │ │ 머클 루트: 04bd… │ │ 머클 루트: e5a2… │
│ 타임스탬프 / 난이도 │ │ 타임스탬프 / 난이도 │ │ 타임스탬프 / 난이도 │
│ 논스(nonce) │ │ 논스(nonce) │ │ 논스(nonce) │
├──────────────────────┤ ├──────────────────────┤ ├──────────────────────┤
│ 거래 Tx1, Tx2, … │ │ 거래 … │ │ 거래 … │
└──────────────────────┘ └──────────────────────┘ └──────────────────────┘
(블록 헤더 = 위 칸, 블록 바디 = 거래 목록)
왜 변조가 어려운가: #100의 거래 하나를 고치면 → #100의 머클 루트가 바뀜 → #100 블록 해시가 바뀜 → #101에 저장된 "이전 해시"와 불일치 → #101, #102 … 이후 모든 블록을 다시 계산해야 하고, 그동안 다른 노드들은 계속 새 블록을 붙이므로 따라잡을 수 없음. 게다가 수많은 노드가 원본 사본을 가지고 있음.
머클 트리(Merkle Tree): 거래들을 쌍으로 해시하며 올라가 하나의 머클 루트를 만듦.
flowchart BT
T1[Tx1] --> H1["H1 = H(Tx1)"]
T2[Tx2] --> H2["H2 = H(Tx2)"]
T3[Tx3] --> H3["H3 = H(Tx3)"]
T4[Tx4] --> H4["H4 = H(Tx4)"]
H1 --> H12["H12 = H(H1‖H2)"]
H2 --> H12
H3 --> H34["H34 = H(H3‖H4)"]
H4 --> H34
H12 --> R["머클 루트 = H(H12‖H34)"]
H34 --> R- 거래 하나만 바뀌어도 루트가 바뀜. 특정 거래가 블록에 포함됐는지 log₂N개의 해시만으로 증명(경량 노드 SPV).
합의 알고리즘
| 방식 | 블록 생성권을 얻는 방법 | 장점 | 단점 | 예 |
|---|---|---|---|---|
| 작업증명 (PoW) | 해시 퍼즐을 먼저 푼 노드 | 검증된 안전성, 탈중앙 | 막대한 전력, 느림 | 비트코인 |
| 지분증명 (PoS) | 보유(예치) 지분에 비례해 검증자 선정 | 에너지 효율 | 부익부, 초기 분배 문제 | 이더리움(2022 머지 이후) |
| 위임지분증명 (DPoS) | 지분 보유자가 대표 노드 투표 | 빠름 | 중앙화 경향 | EOS |
| PBFT 계열 | 노드 간 투표(1/3 미만 악의 노드 허용) | 즉시 확정 | 노드 수 제한 | 프라이빗/컨소시엄 |
작업증명(PoW) 동작 원리
- 목표: H(블록 헤더) < 목표값(Target) 이 되는 논스를 찾기. 해시는 예측 불가하므로 논스를 하나씩 바꿔 가며 무작정 시도하는 수밖에 없음.
- 직관 예(설명용 가상 값): "해시가 0000으로 시작해야 한다"면
16진수 한 자리가 0일 확률 1/16 → 네 자리 0은 평균 16⁴ = 65,536번 시도. 0을 하나 늘리면 난이도 16배.nonce = 0 → H = 9c1a… ✗ nonce = 1 → H = 37fe… ✗ … nonce = 52,718 → H = 0000b3… ✔ → 블록 생성, 보상 획득 - 비트코인은 SHA-256 두 번(double SHA-256), 평균 약 10분에 한 블록이 나오도록 2016블록마다 난이도 자동 조정.
- 찾기는 어렵지만 검증은 해시 한 번이면 끝(비대칭성).
블록체인 공격
| 공격 | 내용 |
|---|---|
| 51% 공격 | 전체 연산력(PoS는 지분)의 과반을 장악해 더 긴 체인을 만들어 거래 뒤집기 → 이중 지불 |
| 이중 지불 (Double Spending) | 같은 코인을 두 번 사용 |
| 시빌 공격 (Sybil) | 가짜 신원(노드)을 대량 생성해 영향력 확보 → PoW/PoS가 비용을 부과해 방어 |
| 이기적 채굴 (Selfish Mining) | 찾은 블록을 숨겼다가 한꺼번에 공개 |
| 스마트 컨트랙트 취약점 | 코드 버그 악용(재진입 공격 — 2016 The DAO) |
| 개인키 탈취 | 거래소·지갑 해킹. 블록체인 자체가 아니라 키 관리 문제 |
| 유형 | 참여 | 예 |
|---|---|---|
| 퍼블릭 | 누구나 | 비트코인, 이더리움 |
| 프라이빗 | 허가된 단일 조직 | 기업 내부 |
| 컨소시엄 | 허가된 여러 기관 | Hyperledger Fabric, 은행 연합 |
6-2. 양자내성암호 (PQC, Post-Quantum Cryptography)
양자컴퓨터가 암호에 주는 위협
| 양자 알고리즘 | 하는 일 | 영향받는 암호 | 대응 |
|---|---|---|---|
| 쇼어(Shor), 1994 | 소인수분해·이산대수를 다항식 시간에 해결 | RSA, DH, DSA, 엘가말, ECC 전부 붕괴 | PQC로 교체 |
| 그로버(Grover), 1996 | 정렬 안 된 탐색을 √N 번으로 → 전수 공격 제곱근 단축 | 대칭키·해시 강도 절반 (AES-128 → 약 64비트) | 키·해시 길이 2배 (AES-256, SHA-384 이상) |
- HNDL (Harvest Now, Decrypt Later, 지금 수집·나중에 해독): 지금 암호화된 트래픽을 저장해 두었다가 양자컴퓨터가 나오면 해독 → 장기간 비밀이 필요한 데이터는 지금 당장 전환 필요.
- PQC는 양자컴퓨터가 아니라 기존 컴퓨터에서 돌아가는 새로운 수학 문제 기반 공개키 암호. (양자 키 분배 QKD와 구분: QKD는 양자역학 물리 현상을 이용하는 장비 기반 기술)
PQC 수학 계열
| 계열 | 기반 문제 | 대표 | 특징 |
|---|---|---|---|
| 격자 기반 | LWE/Module-LWE, NTRU | ML-KEM, ML-DSA, FN-DSA(Falcon) | 주류, 속도·키 크기 균형 |
| 해시 기반 | 해시 함수 안전성만 가정 | SLH-DSA(SPHINCS+), XMSS, LMS | 서명 전용, 안전성 신뢰도 높음, 서명 큼 |
| 코드(부호) 기반 | 오류 정정 부호 해독 | Classic McEliece, HQC | 공개키 매우 큼 |
| 다변수 기반 | 다변수 이차방정식 | Rainbow (2022 깨짐) | – |
| 아이소제니 기반 | 타원곡선 동종사상 | SIKE (2022 깨짐) | – |
NIST PQC 표준 (2024년 8월 발표)
| 표준 | 이름 | 원래 이름 | 용도 | 계열 |
|---|---|---|---|---|
| FIPS 203 | ML-KEM | CRYSTALS-Kyber | 키 캡슐화(KEM) — 키 교환 | 격자 |
| FIPS 204 | ML-DSA | CRYSTALS-Dilithium | 전자서명 (주력) | 격자 |
| FIPS 205 | SLH-DSA | SPHINCS+ | 전자서명 (백업) | 해시 |
| FIPS 206 (예정) | FN-DSA | Falcon | 전자서명 (짧은 서명) | 격자 |
| (2025.3 추가 선정) | HQC | – | KEM 백업 | 코드 |
- 약어 풀이: ML = Module-Lattice, SLH = Stateless Hash-based, KEM = Key Encapsulation Mechanism.
- KEM은 DH처럼 "키 합의"가 아니라, 공개키로 랜덤 공유 비밀을 캡슐화해 보내고 상대가 개인키로 역캡슐화하는 방식.
국내: KpqC 공모전 — 국내 양자내성암호 표준화를 위해 진행, 2025년 1월 최종 알고리즘 선정: KEM SMAUG-T, NTRU+, 서명 HAETAE, AIMer. 정부는 2035년경까지 공공 분야 PQC 전환을 목표로 로드맵 추진.
전환 전략
- 암호 민첩성(Crypto Agility): 알고리즘을 쉽게 교체할 수 있게 시스템 설계.
- 하이브리드 방식: 기존(ECDH X25519) + PQC(ML-KEM)를 함께 써서 하나가 깨져도 안전 → 이미 주요 브라우저·TLS 1.3에 적용.
- 암호 자산 목록화(인벤토리) → 우선순위(장기 기밀 데이터 먼저) → 단계적 교체.
6-3. 동형암호 (Homomorphic Encryption)
암호문 상태 그대로 연산하고, 그 결과를 복호화하면 평문끼리 연산한 결과와 같아지는 암호.
평문 세계: 3, 5 ──(더하기)──► 8
│ ▲
암호화 복호화
▼ │
암호문 세계: E(3), E(5) ──(암호문 연산 ⊕)──► E(8)
- 비유: 잠긴 장갑 상자(글러브 박스) — 작업자는 상자 안 재료를 장갑 구멍으로 조립할 수 있지만 꺼내 볼 수는 없음. 열쇠는 주인만 가짐.
- 활용: 클라우드에 데이터를 맡기되 내용은 숨긴 채 분석, 의료·금융 데이터 공동 분석, 개인정보를 보호하는 AI 학습/추론, 전자투표 집계.
| 종류 | 가능한 연산 | 예 |
|---|---|---|
| 부분 동형 (PHE) | 덧셈 또는 곱셈 중 하나만 무제한 | RSA·엘가말(곱셈), Paillier(덧셈) |
| 준동형 (SHE, Somewhat) | 덧셈·곱셈 둘 다, 단 횟수 제한 | BGV 초기형 |
| 완전 동형 (FHE) | 덧셈·곱셈 무제한 → 임의 연산 | 2009 젠트리(Gentry), BGV, BFV, CKKS |
✏️ 예제: RSA의 곱셈 동형성 (n = 55, e = 3 — Day 4 키)
-
E(2) = 2³ mod 55 = 8, E(3) = 3³ mod 55 = 27
-
암호문끼리 곱: 8 × 27 = 216 = 55×3 + 51 → 51
-
평문 곱 6을 직접 암호화: E(6) = 6³ = 216 ≡ 51 ✅ → E(2) × E(3) = E(2 × 3)
-
즉 키 없이도 "암호문 곱하기 = 평문 곱하기"가 됨. 덧셈은 안 됨 → 부분 동형.
-
FHE의 난제: 암호문 연산 때마다 잡음(noise) 이 쌓여 일정 이상이면 복호화 불가 → 젠트리가 부트스트래핑(잡음 초기화)으로 해결. 단점은 매우 느리고 암호문이 큼.
-
CKKS (2017): 서울대 천정희 교수 연구팀(Cheon-Kim-Kim-Song)이 제안한 근사(실수) 연산 동형암호 → AI·통계에 적합, 세계적으로 널리 쓰임.
-
대부분의 FHE는 격자 기반 → 양자내성도 기대.
6-4. 경량암호 (Lightweight Cryptography)
IoT 센서, RFID, 스마트카드, 의료 임플란트처럼 CPU·메모리·전력이 극히 제한된 기기용 암호. 목표: 작은 회로 면적(GE), 적은 메모리, 저전력, 짧은 지연 + 충분한 안전성.
| 알고리즘 | 출신 | 블록/키 | 구조 | 비고 |
|---|---|---|---|---|
| HIGHT | 한국(2005) | 64 / 128 | 변형 Feistel(ARX) | RFID·센서, ISO/IEC 18033-3 |
| LEA | 한국 NSR(2013) | 128 / 128·192·256 | ARX | SW에서 AES보다 빠름, KS X 3246, ISO/IEC 29192-2 |
| CHAM | 한국 NSR(2017) | 64·128 / 128·256 | ARX | 초경량 |
| PRESENT | 유럽(2007) | 64 / 80·128 | SPN | ISO/IEC 29192-2, 초소형 하드웨어 |
| SIMON / SPECK | 미국 NSA(2013) | 다양 | Feistel / ARX | ISO 표준화 무산 |
| Ascon | 오스트리아 연구진 | 상태 320비트 순열 | 스펀지 기반 AEAD+해시 | NIST 경량암호 표준 (2023년 2월 선정) |
- Ascon: NIST 경량암호 공모(2019~2023) 우승. 2025년 NIST SP 800-232로 표준화(Ascon-AEAD128, Ascon-Hash256, Ascon-XOF128 등). 하나의 순열로 인증 암호화(AEAD)와 해시를 모두 제공. CAESAR 공모전 경량 부문에서도 1순위.
- 경량화 기법: 작은 블록(64비트), 단순 연산(ARX), 작은 S-box(4비트), 간단한 키 스케줄, 라운드 수 증가로 안전성 보완.
6-5. 딥페이크와 AI 보안 위협
딥페이크(Deepfake) = 딥러닝(Deep learning) + 가짜(Fake). AI로 얼굴·음성·영상을 실제처럼 합성·조작한 콘텐츠.
생성 기술
- GAN (생성적 적대 신경망): 생성자(가짜를 만듦)와 판별자(진짜/가짜 구분)가 서로 경쟁하며 학습 → 판별자가 못 알아볼 만큼 정교해짐.
- 확산(Diffusion) 모델: 노이즈에서 점차 이미지를 복원하며 생성. 최신 이미지·영상 생성의 주류.
- 음성 복제(Voice Cloning): 몇 초~몇 분의 음성 샘플로 목소리 재현.
- 얼굴 교체(Face Swap), 표정·입모양 재현(Reenactment, Lip-sync).
위협
| 위협 | 예 |
|---|---|
| 사칭·사기 | 가족 목소리 보이스피싱, CEO 사칭 화상회의로 송금 지시 |
| 생체 인증 우회 | 얼굴·음성 인증, 비대면 본인확인(eKYC) 속이기 |
| 허위정보·여론 조작 | 정치인 가짜 연설, 선거 개입 |
| 성적 착취물·명예훼손 | 동의 없는 합성물 |
| 증거 신뢰성 붕괴 | 진짜 증거도 "딥페이크"라고 부인(거짓말쟁이의 배당, Liar's Dividend) |
탐지와 대응
| 구분 | 방법 |
|---|---|
| 탐지 기술 | 합성 흔적(Artifact) 분석: 부자연스러운 눈 깜빡임, 경계면, 조명·그림자 불일치, 주파수 영역 이상, 입모양-음성 불일치 / AI 기반 탐지 모델 |
| 생체 인증 방어 | 라이브니스(Liveness) 탐지 = 위조 제시 공격 탐지(PAD, ISO/IEC 30107): 실제 사람인지 확인(움직임 요청, 깊이·적외선 센서) |
| 출처 증명 | 디지털 워터마크(AI 생성물에 보이지 않는 표식), C2PA 콘텐츠 자격증명(촬영·편집 이력을 전자서명으로 기록) |
| 절차적 대응 | 송금 요청 시 다른 채널로 재확인(콜백), 가족 간 암호 단어, 다중 승인 |
| 제도 | AI 기본법(2026년 1월 시행): 생성형 AI 결과물 표시 의무 등 / 선거 기간 딥페이크 선거운동 제한 / 딥페이크 성착취물 제작·소지·시청 처벌 강화 |
함께 알아둘 AI 대상 공격
| 공격 | 내용 |
|---|---|
| 적대적 예제 (Adversarial Example) | 사람 눈엔 안 보이는 미세 노이즈로 AI 오판 유도 |
| 데이터 오염 (Poisoning) | 학습 데이터에 악성 데이터 주입 |
| 모델 추출 / 모델 역추론 (Inversion) | 질의로 모델 복제, 학습 데이터(개인정보) 복원 |
| 프롬프트 인젝션 | LLM에 악성 지시를 넣어 정책 우회·정보 유출 |
6-6. 암호 표준화 동향
| 기관 | 내용 |
|---|---|
| NIST (미국) | AES, SHA-2/3, PQC(FIPS 203·204·205), 경량암호 Ascon(SP 800-232), 2030년대 RSA·ECC 단계적 퇴출 계획 |
| ISO/IEC JTC 1/SC 27 | 국제 정보보호 표준 (18033 암호, 29192 경량암호, 30107 PAD) |
| IETF | TLS 1.3, 하이브리드 PQC 키 교환 |
| 국내 (KISA·NSR·TTA·KS) | SEED, ARIA, HIGHT, LEA, LSH, KCDSA, KpqC, KCMVP(암호모듈 검증제도: 공공기관은 검증필 암호모듈 사용) |
⚠️ 시험 함정 (Day 6)
- 쇼어 = 공개키(RSA·ECC·DH) 붕괴, 그로버 = 대칭키·해시 강도 절반. 그로버로 "AES가 완전히 깨진다" → ✗ (키 길이 2배로 대응 가능).
- ML-KEM = 키 캡슐화(구 Kyber), ML-DSA = 서명(구 Dilithium), SLH-DSA = 해시 기반 서명(구 SPHINCS+). 용도 바꿔치기 주의.
- PQC는 양자컴퓨터 없이 기존 컴퓨터로 동작. QKD와 다름.
- PoW = 연산 경쟁(비트코인), PoS = 지분(이더리움). PoW의 단점 = 에너지 소모.
- 블록은 이전 블록의 해시를 포함(다음 블록 해시 ✗).
- RSA·엘가말은 곱셈 동형, Paillier는 덧셈 동형 → 모두 부분 동형. 완전 동형은 젠트리(2009).
- Ascon = NIST 경량암호(AES 아님). 국산 경량 = HIGHT, LEA(ARIA·SEED는 경량 아님).
- 딥페이크 대응으로 "백신 프로그램 설치" 같은 엉뚱한 보기 주의 → 정답 계열은 워터마크·출처 인증·라이브니스·탐지 모델.
📌 기출 포인트 (Day 6, 예상)
- 블록체인의 무결성 원리(이전 해시 연결, 머클 루트), PoW/PoS 차이, 51% 공격.
- 양자 알고리즘별 위협 대상과 대응, NIST PQC 표준 이름과 용도 매칭.
- 동형암호의 정의와 종류(부분/완전), 활용 분야.
- 경량암호의 정의와 국산/국제 대표 알고리즘.
- 딥페이크 위협 사례와 대응 방안(기술·제도) 중 옳지 않은 것 고르기.
📝 확인 문제 (Day 6)
Q1. 양자컴퓨팅이 암호에 미치는 영향에 대한 설명으로 옳지 않은 것은?
① 쇼어 알고리즘은 RSA와 ECC의 안전성을 무너뜨린다
② 그로버 알고리즘은 대칭키 전수 공격을 제곱근 수준으로 단축한다
③ 그로버 알고리즘에 대응하려면 대칭키 길이를 2배로 늘리면 된다
④ 쇼어 알고리즘 때문에 AES-256도 더 이상 안전하지 않다
정답: ④
- ①②③ 맞음.
- ④ 틀림(정답): 쇼어는 소인수분해·이산대수 문제를 푸는 알고리즘으로 AES와 무관. AES-256은 그로버를 고려해도 약 128비트 강도로 안전.
Q2. NIST 양자내성암호 표준과 용도의 연결로 옳은 것은?
① ML-KEM – 해시 기반 전자서명
② ML-DSA – 격자 기반 전자서명
③ SLH-DSA – 격자 기반 키 캡슐화
④ FN-DSA – 코드 기반 키 캡슐화
정답: ②
- ① 틀림: ML-KEM은 격자 기반 키 캡슐화(FIPS 203).
- ② 맞음: FIPS 204, 구 Dilithium.
- ③ 틀림: SLH-DSA는 해시 기반 서명(FIPS 205).
- ④ 틀림: FN-DSA(Falcon)는 격자 기반 서명.
Q3. 블록체인에 대한 설명으로 옳지 않은 것은?
① 각 블록 헤더에는 이전 블록의 해시값이 포함된다
② 작업증명은 목표값보다 작은 해시를 만드는 논스를 찾는 방식이다
③ 지분증명은 작업증명보다 에너지 소모가 크다
④ 51% 공격은 과반의 연산력이나 지분을 확보해 거래 기록을 조작하는 공격이다
정답: ③
- ③ 틀림(정답): 에너지 소모가 큰 쪽은 PoW. PoS는 연산 경쟁이 없어 에너지 효율적.
- ①②④는 올바른 설명.
Q4. 동형암호에 대한 설명으로 옳은 것은?
① 암호문을 복호화하지 않고 연산한 결과를 복호화하면 평문 연산 결과와 같다
② Paillier 암호는 곱셈에 대한 완전 동형암호이다
③ 완전 동형암호는 연산 속도가 빨라 이미 대칭키 암호를 대체했다
④ RSA는 덧셈 동형성을 갖는다
정답: ①
- ① 맞음: 동형암호의 정의.
- ② 틀림: Paillier는 덧셈 동형이며 부분 동형.
- ③ 틀림: FHE는 매우 느리고 암호문이 커서 특수 용도에 한정.
- ④ 틀림: RSA는 곱셈 동형.
Q5. 경량암호에 대한 설명으로 옳지 않은 것은?
① IoT 기기처럼 자원이 제한된 환경을 위한 암호이다
② HIGHT와 LEA는 국내에서 개발된 경량 블록 암호이다
③ NIST는 경량암호 표준으로 Ascon을 선정하였다
④ ARIA는 64비트 블록을 사용하는 대표적 국산 경량 암호이다
정답: ④
- ④ 틀림(정답): ARIA는 128비트 블록, SPN 구조의 범용 국가 표준 암호. 64비트 블록 국산 경량 암호는 HIGHT.
- ①②③은 올바른 설명.
Q6. 딥페이크 대응 방안으로 가장 거리가 먼 것은?
① 생체 인증 시 라이브니스(위조 제시 공격) 탐지 적용
② AI 생성 콘텐츠에 디지털 워터마크 삽입 및 출처 정보 전자서명
③ 음성으로 송금을 지시받으면 다른 채널로 재확인
④ 영상 파일을 ECB 모드로 암호화하여 저장
정답: ④
- ④ 틀림(정답): 저장 암호화는 딥페이크 생성·유포·사칭과 무관하며, 더구나 ECB는 패턴이 노출되는 취약 모드.
- ①②③은 기술적·절차적 대응으로 적절.
Day 7 · 주간 정리
7-1. 주간 핵심 요약
접근통제 (Day 1)
| 항목 | 핵심 |
|---|---|
| 절차 | 식별 → 인증 → 인가 → 책임추적 |
| 3요소 | 정책(DAC/MAC/RBAC) · 메커니즘(ACL/CL/레이블) · 모델(BLP/Biba…) |
| DAC / MAC / RBAC | 소유자·ID / 시스템·레이블 / 관리자·역할 |
| 행렬 | 행 = Capability(주체) · 열 = ACL(객체) |
| BLP | 기밀성: No Read Up(ss) · No Write Down(*) |
| Biba | 무결성: No Read Down · No Write Up |
| 클락-윌슨 | 상업 무결성: TP·CDI·UDI·IVP, 직무 분리 |
| 만리장성 | 이해충돌, 이력 따라 동적 권한 |
| 기타 | HRU(판정 불가) · Take-Grant(그래프, 판정 가능) · 래티스 · 비간섭(은닉 채널) |
인증·키 분배 (Day 2)
| 항목 | 핵심 |
|---|---|
| 인증 유형 | 지식·소유·생체·행위 → MFA는 서로 다른 유형 |
| OTP | TOTP(시간) · HOTP(카운터) · 질의응답 · S/Key(해시 체인 역순) |
| 바이오 | FAR(타인 수락, 보안) · FRR(본인 거부, 편의) · CER 낮을수록 좋음 |
| Kerberos | 대칭키, KDC=AS+TGS, TGT, Authenticator+타임스탬프, 약점: 시간 동기화·KDC SPoF·패스워드 추측 |
| SSO 계열 | SAML(XML 인증) · OAuth(인가) · OIDC(인증, JWT) |
| AAA | RADIUS(UDP, 패스워드만) · TACACS+(TCP 49, 전체) · Diameter(TCP/SCTP, 후속) |
| 키 개수 | 대칭 n(n−1)/2 · 공개 2n · KDC 사용 시 n |
| 공개키 분배 | 공개 발표 → 공개 디렉터리 → 관리기관 → 인증서 |
| DH | 이산대수, 키 교환 전용, MITM 취약 → 인증 결합 |
대칭키 (Day 3)
| 항목 | 핵심 |
|---|---|
| 원리 | 혼돈(치환) · 확산(전치) · 쇄도 효과 |
| Feistel / SPN | 절반·역함수 불필요·같은 구조(DES, SEED) / 전체·역연산 필요(AES, ARIA) |
| DES | 64 블록 · 56 키 · 16라운드 · 48비트 라운드키 · S-box 8개 |
| AES | 128 블록 · 10/12/14라운드 · SubBytes→ShiftRows→MixColumns→AddRoundKey, 마지막 MixColumns 없음 |
| 국산 | SEED(Feistel) · ARIA(SPN) · HIGHT(64블록 경량) · LEA(ARX 경량) |
| 모드 | ECB 패턴 노출 · CBC IV/암호화 순차 · CFB 자기동기 · OFB 오류 전파 없음 · CTR 병렬·랜덤 접근 |
| 공격 | COA < KPA(선형) < CPA(차분) < CCA |
공개키 (Day 4)
| 항목 | 핵심 |
|---|---|
| 소인수분해 | RSA, Rabin(4개 근, 증명된 안전성) |
| 이산대수 | DH, 엘가말(확률적·2배 길이), DSA(서명 전용), KCDSA |
| 타원곡선 | ECC 256 ≈ RSA 3072 ≈ AES-128 |
| RSA | n=pq, φ=(p−1)(q−1), ed≡1 mod φ, C=Mᵉ, M=Cᵈ, OAEP/PSS |
| 하이브리드 | 데이터는 대칭키, 세션키는 수신자 공개키 |
해시·서명·PKI (Day 5)
| 항목 | 핵심 |
|---|---|
| 안전성 | 역상 2ⁿ · 제2역상 2ⁿ · 충돌 2^(n/2) |
| 구조 | MD(MD5·SHA-1·SHA-2, 길이 확장 취약) · 스펀지(SHA-3) |
| MAC | 무결성+출처 인증, 부인방지 ✗ / HMAC ipad 0x36·opad 0x5C |
| 패스워드 | 솔트(레인보우 방지) · 스트레칭(PBKDF2·bcrypt) · 메모리 하드(scrypt·Argon2) |
| 서명 요건 | 위조불가·서명자인증·부인방지·변경불가·재사용불가 |
| 특수 서명 | 은닉(전자화폐) · 이중(SET) · 대리 · 그룹 · 다중 |
| X.509 v3 | 일련번호·발급자·유효기간·주체·공개키·확장(BasicConstraints, KeyUsage, SAN, CRL DP, AIA) |
| 폐지 | CRL(주기 목록) · OCSP(실시간, good/revoked/unknown) · 스테이플링 |
신규 범위 (Day 6)
| 항목 | 핵심 |
|---|---|
| 블록체인 | 이전 블록 해시 · 머클 루트 · PoW(비트코인) · PoS(이더리움) · 51% 공격 |
| 양자 위협 | 쇼어 → 공개키 붕괴 · 그로버 → 대칭키 절반 · HNDL |
| NIST PQC | FIPS 203 ML-KEM · 204 ML-DSA · 205 SLH-DSA |
| 동형암호 | PHE(RSA·엘가말 곱, Paillier 덧) · FHE(젠트리, CKKS) |
| 경량암호 | HIGHT · LEA · Ascon(NIST) |
| 딥페이크 | 탐지 모델 · 라이브니스 · 워터마크 · C2PA · 재확인 절차 |
7-2. 미니 모의고사 (20문항)
M1. 접근통제 절차를 올바른 순서로 나열한 것은?
① 인증 → 식별 → 인가 ② 식별 → 인증 → 인가 ③ 인가 → 식별 → 인증 ④ 식별 → 인가 → 인증
정답: ②
- 먼저 "누구라고 주장"(식별), 그 주장을 "검증"(인증), 그다음 "권한 부여"(인가). 나머지는 순서가 뒤바뀜.
M2. 벨-라파둘라 모델의 *-속성(Star Property)이 의미하는 것은?
① 자신보다 높은 등급의 객체를 읽을 수 없다
② 자신보다 낮은 등급의 객체에 쓸 수 없다
③ 자신보다 낮은 무결성 객체를 읽을 수 없다
④ 자신보다 높은 무결성 객체에 쓸 수 없다
정답: ②
- ① 틀림: BLP 단순 보안 속성. ③ 틀림: Biba 단순 무결성 속성. ④ 틀림: Biba *-무결성 속성.
M3. 경쟁 관계에 있는 기업의 정보에 동시에 접근하지 못하도록 하여 이해충돌을 방지하는 모델은?
① 클락-윌슨 ② 브루어-내쉬(만리장성) ③ 비바 ④ Take-Grant
정답: ②
- ① 틀림: 정형화된 트랜잭션·직무 분리. ③ 틀림: 무결성 등급. ④ 틀림: 권한 이동 그래프.
M4. Kerberos의 구성 요소가 아닌 것은?
① AS ② TGS ③ TGT ④ OCSP 응답자
정답: ④
- OCSP 응답자는 PKI의 인증서 상태 확인 서버. ①②는 KDC 구성, ③은 티켓 발급용 티켓.
M5. 원격 접속 인증 프로토콜에 대한 설명으로 옳은 것은?
① RADIUS는 TCP 49번 포트를 사용한다
② TACACS+는 패킷 본문 전체를 암호화한다
③ RADIUS는 인증·인가·과금을 완전히 분리하여 처리한다
④ Diameter는 UDP만 사용하는 RADIUS의 경량 버전이다
정답: ②
- ① 틀림: RADIUS는 UDP 1812/1813(TCP 49는 TACACS+). ③ 틀림: RADIUS는 인증·인가 결합(분리는 TACACS+). ④ 틀림: Diameter는 TCP/SCTP 기반 확장형 후속 프로토콜.
M6. 공개키 분배 방식으로 분류되지 않는 것은?
① 공개 발표 ② 공개 디렉터리 ③ KDC와 마스터키를 공유하는 방식 ④ 공개키 인증서
정답: ③
- ③은 대칭키 분배 방식. 공개키 분배 4가지 = 공개 발표, 공개 디렉터리, 공개키 관리기관, 공개키 인증서.
M7. p = 13, g = 2인 디피-헬먼에서 A의 비밀값 4, B의 비밀값 5일 때 공유 비밀키는?
① 3 ② 6 ③ 9 ④ 12
정답: ③
- A 공개값 = 2⁴ = 16 ≡ 3, B 공개값 = 2⁵ = 32 ≡ 6 (mod 13)
- A측: 6⁴ = 1296 = 13×99 + 9 → 9 / B측: 3⁵ = 243 = 13×18 + 9 → 9 ✔
- ① 틀림: A 공개값. ② 틀림: B 공개값. ④ 틀림: 계산 실수 보기.
M8. DES에 대한 설명으로 옳지 않은 것은?
① 블록 크기는 64비트이다
② 실제 키 길이는 56비트이다
③ 16라운드 SPN 구조이다
④ 각 라운드에 48비트 라운드키를 사용한다
정답: ③
- DES는 Feistel 16라운드. SPN은 AES·ARIA. ①②④는 옳음.
M9. 동일한 평문 블록이 항상 동일한 암호문 블록으로 암호화되어 패턴이 노출되는 운영 모드는?
① ECB ② CBC ③ OFB ④ CTR
정답: ①
- ②③④는 IV/Nonce를 사용해 같은 평문도 다른 암호문이 됨.
M10. 블록 암호의 출력을 다시 암호화 입력으로 되먹여 키스트림을 만들며, 전송 오류가 다른 비트로 전파되지 않는 모드는?
① CFB ② OFB ③ CBC ④ ECB
정답: ②
- ① 틀림: CFB는 암호문을 되먹이므로 오류가 다음 블록으로 전파. ③ 틀림: CBC는 2블록 영향. ④ 틀림: ECB는 블록 전체 손상, 피드백 없음.
M11. 선형 암호 분석이 가정하는 공격 모델은?
① 암호문 단독 공격 ② 기지 평문 공격 ③ 선택 평문 공격 ④ 선택 암호문 공격
정답: ②
- 선형 분석(마쓰이)은 다수의 알려진 평문-암호문 쌍을 이용. ③은 차분 분석의 모델.
M12. RSA에서 p = 3, q = 11, e = 7일 때 개인키 d는?
① 3 ② 7 ③ 13 ④ 17
정답: ①
- φ(n) = 2 × 10 = 20, 7 × 3 = 21 = 20 + 1 → d = 3
- ② 7×7 = 49 ≡ 9, ③ 7×13 = 91 ≡ 11, ④ 7×17 = 119 ≡ 19 (mod 20) → 모두 1이 아님.
M13. 엘가말 암호에 대한 설명으로 옳지 않은 것은?
① 이산대수 문제에 기반한다
② 같은 평문은 항상 같은 암호문으로 암호화된다
③ 암호문 길이가 평문의 약 2배이다
④ 전자서명 방식으로도 사용할 수 있다
정답: ②
- 엘가말은 매번 새 난수 k를 쓰는 확률적 암호라 같은 평문도 다른 암호문. ①③④는 옳음.
M14. 256비트 ECC와 비슷한 보안 강도를 갖는 RSA 키 길이는?
① 1024비트 ② 2048비트 ③ 3072비트 ④ 15360비트
정답: ③
- 128비트 보안 강도: AES-128 ≈ RSA 3072 ≈ ECC 256. ② 2048은 112비트(ECC 224), ④ 15360은 256비트(ECC 512) 강도.
M15. 출력이 256비트인 해시 함수에서 생일 공격으로 충돌을 찾는 데 필요한 대략적인 시도 횟수는?
① 2⁶⁴ ② 2¹²⁸ ③ 2²⁵⁵ ④ 2²⁵⁶
정답: ②
- 2^(n/2) = 2¹²⁸. ④는 역상 공격, ③은 역상 공격 평균값, ①은 n/4.
M16. 패스워드 저장 시 사용자마다 다른 솔트(Salt)를 추가하는 주된 목적은?
① 레인보우 테이블 등 사전 계산 공격을 무력화한다
② 솔트를 비밀로 유지해 패스워드를 암호화한다
③ 해시 출력 길이를 늘려 생일 공격을 막는다
④ 해시 계산을 의도적으로 느리게 만든다
정답: ①
- ② 틀림: 솔트는 비밀이 아님(DB에 함께 저장). ③ 틀림: 출력 길이와 무관. ④ 틀림: 키 스트레칭의 목적.
M17. 전자서명이 기본적으로 만족해야 하는 요건이 아닌 것은?
① 위조 불가 ② 부인 방지 ③ 기밀성 ④ 재사용 불가
정답: ③
- 전자서명은 문서를 암호화하지 않으므로 기밀성은 요건이 아님. 5요건 = 위조 불가, 서명자 인증, 부인 방지, 변경 불가, 재사용 불가.
M18. 서명자가 메시지 내용을 알지 못한 채 서명하게 하여 사용자의 익명성을 보장하는 서명과 그 대표 응용은?
① 이중 서명 – SET ② 은닉 서명 – 전자화폐 ③ 그룹 서명 – 공동 결재 ④ 대리 서명 – 전자투표
정답: ②
- ① 이중 서명은 두 정보 연결(SET)로 짝은 맞지만 설명과 다름. ③ 공동 결재는 다중 서명. ④ 대리 서명은 권한 위임이며 전자투표는 은닉 서명의 응용.
M19. OCSP 응답 상태로 정의되지 않은 것은?
① good ② revoked ③ unknown ④ expired
정답: ④
- OCSP 응답 상태는 good / revoked / unknown 세 가지. 만료 여부는 인증서 유효기간 필드로 확인.
M20. 다음 연결 중 옳지 않은 것은?
① Ascon – NIST 경량암호 표준
② CKKS – 근사 연산을 지원하는 동형암호
③ SLH-DSA – 해시 기반 전자서명
④ 지분증명(PoS) – 해시 퍼즐을 먼저 푸는 연산 경쟁
정답: ④
- 해시 퍼즐 연산 경쟁은 작업증명(PoW). PoS는 보유 지분에 비례해 검증자를 선정. ①②③은 옳음.
채점: 18개 이상 = 이번 주 목표 달성 / 14~17개 = 틀린 Day의 ⚠️ 함정만 다시 / 13개 이하 = 해당 Day 개념 재독 후 확인 문제 재풀이